Попробуйте: -
list1.stream()
.flatMap(x -> list2
.stream()
.filter(y -> x.getId() == y.getId())
.filter(y -> !x.getLastUpdated().isEqual(y.getLastUpdated()))
.limit(1))
.forEach(product -> System.out.println("Product price has been updated: " + product.getName()));
Я предположил, что ваше свойство priceLastUpdated
имеет тип LocalDateTime
.Вы можете вызвать соответствующий метод equals()
вместо isEqual()
, который я использовал выше, если вы используете какой-либо другой тип.
Вы упомянули " для того же продукта ", но ваш кодне проверяет, является ли продукт тем же.Я использовал id
, чтобы проверить, является ли это тот же продукт x.getId() == y.getId()
.Вы можете использовать любое поле, какое захотите.
Что касается производительности, между Java 7 и 8 нет практической разницы при правильном кодировании.Я говорю «практическая разница», потому что существует множество факторов, влияющих на определение точной разницы, если это вообще возможно.
В вашем примере кода вы не нарушаете цикл, даже если соответствиенайдено, что очень неэффективно.