Ответ 1

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

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

Ответ 2

Да есть retainAll проверить this

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