2012-01-16 3 views

ответ

263

Используйте 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() говорит, что это именно то, что вы хотите:

Сохраняет только элементы этого набора, которые содержатся в указанной коллекции (дополнительная операция). Другими словами, удаляет из этого множества все его элементы, которые не содержатся в указанной коллекции. Если указанная коллекция также является набором, эта операция эффективно изменяет этот набор так, чтобы его значение было пересечением двух наборов.

+0

Только примечание для тех, кто ищет использовать retainAll на другую коллекцию, например, список с повторяющимися элементами. В зависимости от содержимого коллекции вы можете вывести UnsupportedOperationException, а также не будет правильно фильтровать частоты (он сохраняет все и все вхождения значения в левом мультимножестве, независимо от того, сколько раз это происходит в правильном мультимножестве). – Allison

30

Да есть retainAll выписки this

Set<Type> intersection = new HashSet<Type>(s1); 
intersection.retainAll(s2);