How to intersect multiple sets?

Viewed 21236

I have this list:

private List<Set<Address>> scanList;

So my list contains multiple scans as you can see. After each scan I add new set into the list.

After all scans are finished I would like to take only the addresses that occur in every set and put it into:

private List<Address> addresses;

Does something like this already exists in Set/TreeSet/HashSet?

EDIT: after answers, retainAll() is the right method. Thank you. Here is the source:

Set<Address> addressCross = scanList.get(0);
for (int i = 1; i < scanList.size(); i++) {
    addressCross.retainAll(scanList.get(i));
}   
for (Address address : addressCross) {
    addresses.add(address);
}
4 Answers

There's another nice solution over here: https://stackoverflow.com/a/38266681/349169

Set<Address> intersection = scanList.stream()
    .skip(1) // optional
    .collect(()->new HashSet<>(scanList.get(0)), Set::retainAll, Set::retainAll);
Related