Получение разницы между двумя наборами
Поэтому, если у меня есть два набора:
Set test1 = new HashSet(); test1.add(1); test1.add(2); test1.add(3); Set test2 = new HashSet(); test2.add(1); test2.add(2); test2.add(3); test2.add(4); test2.add(5);
Есть ли способ сравнить их, и есть только набор из 4 и 5?
- Как передать целое число из одного действия в другое?
- как вы передаете изображения (растровые изображения) между действиями андроида с помощью пакетов?
- Получение элемента из набора
- Как установить цвет фона в представлении
- Получить n-й символ строки в языке программирования Swift
- Как выбрать случайный элемент в std :: set?
- Удаление элементов из STL, установленных во время итерации
- Как преобразовать массив в набор в Java
- Операции classического набора для java.util.Collection
- Преобразование списка > в список
- Пакетные переменные Windows не будут установлены
- Как JSON сериализует множество?
- Жест Multi-Touch в наборе Sprite
Попробуй это
test2.removeAll(test1);
Набор # RemoveAll
Удаляет из этого набора все его элементы, которые содержатся в указанной коллекции (дополнительная операция). Если указанная коллекция также является множеством, эта операция эффективно модифицирует этот набор, так что его значение представляет собой асимметричную разность наборов двух наборов.
Если вы используете библиотеку Guava (бывшая библиотека Google), есть решение:
SetView difference = com.google.common.collect.Sets.difference(test2, test1);
SetView
– это Set
, это живое представление, которое вы можете либо сделать неизменным, либо скопировать в другой набор. test1
и test2
остаются нетронутыми.
Да:
test2.removeAll(test1)
Хотя это будет мутировать test2
, создайте копию, если вам нужно ее сохранить.
Кроме того, вы, вероятно, имели в виду
вместо
.
Если вы используете Java 8, вы можете попробовать что-то вроде этого:
public Set difference(final Set set1, final Set set2){ final Set larger = set1.size() > set2.size() ? set1 : set2; final Set smaller = larger.equals(set1) ? set2 : set1; return larger.stream().filter(n -> !smaller.contains(n)).collect(Collectors.toSet()); }