Аналогично решению, предложенному @ Hades , но вместо этого используйте Set
s.
Создайте класс-держатель, который содержит все значения, которые вы хотите сравнить, и который переопределяетequals()
и hashCode()
:
class Data {
// the fields you wish to compare
// override hashCode
// override equals
}
Создать Set<Data> source, target;
(используйте LinkedHashSet
, если важен порядок строк) и добавить строки из ResultSet sourceData
в source
и те жедля targetData
.
Тогда вы можете использовать простые операции Set
.
Это оставит все элементы в copy
, которые не происходит в target
:
Set<Data> copy = new LinkedHashSet<>(source);
copy.removeAll(target);
Это сохранит все элементы в copy
, которые do встречаются в target
:
Set<Data> copy = new LinkedHashSet<>(source);
copy.retainAll(target);
Это создаст объединение всех элементов в copy
и target
:
Set<Data> copy = new LinkedHashSet<>(source);
copy.addAll(target);
Я создал copy
поскольку эти операции изменяют Set
, таким образом (при использовании копии) ваш Set<Data> source
не изменится.
Вы также можете обернуть все эти вызовы removeAll()
, retainAll()
и addAll()
вif
- заявление, которое позволяет вам напрямуюсовершать действияНапример, с removeAll()
:
if(copy.removeAll(target)) {
// elements were removed from copy which were in target
} else {
// nothing was removed
}