Используйте retainAll()
метод Set
:
Set<String> s1;
Set<String> s2;
s1.retainAll(s2); // s1 now contains only elements in both sets
Если вы хотите сохранить наборы, создать новый набор держать пересечение:
Set<String> intersection = new HashSet<String>(s1); // use the copy constructor
intersection.retainAll(s2);
javadoc из retainAll()
говорит, что это именно то, что вы хотите:
Сохраняет только элементы этого набора, которые содержатся в указанной коллекции (дополнительная операция). Другими словами, удаляет из этого множества все его элементы, которые не содержатся в указанной коллекции. Если указанная коллекция также является набором, эта операция эффективно изменяет этот набор так, чтобы его значение было пересечением двух наборов.
Только примечание для тех, кто ищет использовать retainAll на другую коллекцию, например, список с повторяющимися элементами. В зависимости от содержимого коллекции вы можете вывести UnsupportedOperationException, а также не будет правильно фильтровать частоты (он сохраняет все и все вхождения значения в левом мультимножестве, независимо от того, сколько раз это происходит в правильном мультимножестве). – Allison