【发布时间】:2019-04-30 13:14:00
【问题描述】:
我有两个对应的列表:
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()));
}
);
我只是在探索流,我认为我的解决方案很笨拙。您将如何使用流和函数式方法以更优雅的方式解决这个问题?
【问题讨论】:
标签: java java-8 functional-programming java-stream