У меня есть два списка объектов Bill
, которые имеют поле date
, которое представляет месяц, когда счет был создан. Мне нужно добавить некоторые объекты из списка bills
в oldBills
. Если в списке oldBills
нет счета с теми же данными, тогда необходимо добавить счет.Оптимизация сравнения и слияния двух списков
Я реализовал это следующим образом:
outer:
for (Bill bill : bills) {
Date billDate = bill.getDate();
for (Bill bill1 : oldBills) {
Date bill1Date = bill1.getDate();
if (Objects.equals(billDate, bill1Date)) {
continue outer;
}
}
newBills.add(bill);
}
oldBills.addAll(newBills);
, но я думаю, что это не самый лучший способ.
Может быть, у вас есть идеи, как оптимизировать этот алгоритм?
пс: Java 7
Что делает счет уникальным? –
дата может быть представлена объектом даты, что означает, что даты могут быть разными для миллисекунд ... это нормально для вас –
Если вы пытаетесь посмотреть на столкновений в календарную дату, используйте объекты ['LocalDate'] (https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) класс java.time framework, встроенный в Java 8 и более поздние версии, а не старый 'java.util.Date' класс. Если вы сравниваете по календарному месяцу, как упоминалось, используйте класс ['YearMonth'] (https://docs.oracle.com/javase/8/docs/api/java/time/YearMonth.html). –