У меня есть два соответствующих списка:
public class BookOverallData {
private Long idOfBook;
private String title;
private String authour;
private BigDecimal basePrice;
private Integer discountRate;
}
public class TimeDiscount {
private Long idOfBook;
private Integer discountRate;
}
Set<BookOverallData> booksToReturn
Set<TimeDiscount> actualPromotions
Цель состоит в суммировании скидок, что означает добавление значения discountRate
от actualPromotions
до discountRate
из списка booksToReturn
.Объекты из обоих списков могут быть сопоставлены как idOfBook
.
Вот как я решил это
booksToReturn.forEach(
p -> {
final Optional<TimeDiscount> promotion = actualPromotions.stream().filter(ap -> Objects.equals(ap.getIdOfBook(), p.getIdOfBook())).findFirst();
promotion.ifPresent(ap -> p.setDiscountRate(ap.getDiscountRate() + p.getDiscountRate()));
}
);
Я просто исследую потоки, и я думаю, что мое решение комковато.Как бы вы решили эту проблему более элегантно, с использованием потоков и функционального подхода?