У меня есть два набора результатов (rs1
и rs2
) наличие тех же полей. Теперь, как объединить те два набора результатов в тот так, чтобы дублирующиеся строки показали однажды.
если два ResultSet
взяты из одной базы данных, то почему бы не объединить их во время извлечение с помощью union
; например
select A, B
from C
union
select A, B
from D
Однако, если это не вариант, я предлагаю определить класс Row
для представления строки, извлеченной из вашего ResultSet
, и реализовать равным
/ ] hashCode
, позволяющий сравнивать Строку
на равенство. Затем просто добавьте каждую строку
в набор
(например, HashSet
), чтобы удалить дубликаты.
Вы можете:
equals()
и hashCode()
, используя поля, по которым вы определяете "дубликат" (пусть ваша IDE поможет вам с их генерацией)создать Set
(HashSet
):
Set combinedDataSet = new HashSet();
Итерация каждого resultSet и создание объектов:
while (rs1. next) {
YourClass obj = new YourClass();
obj.setSomeProperty(rs.getString(1));
obj.setAnotherProperty(rs.getString(2));
// и т.д.
cominbedDataSet.add(obj);
}
Та же самая итерация происходит для rs2
Делайте это только в том случае, если вы не можете получить желаемый результат через SQL-запрос!