我不喜欢forEach的部分,但我不知道如何用lambda更好地做到这一点。
list1.stream().map(element -> {
list2.forEach(item -> {
if (element.getKey().equals(item.getKeyNextYear())) {
element.setSummPreviosYear(item.getSumm());
element.setCashboxCountPreviosYear(item.getCashboxCount());
element.setCheckCountPreviosYear(item.getCheckCount());
element.setArticleCountPreviosYear(item.getArticleCount());
}
});
return element;
}).collect(Collectors.toList());
答案 0 :(得分:6)
您可以通过删除外部流并使用filter().findAny()
搜索执行内部部分来简化此操作。如果list2中的多个项目与元素匹配,这也可以防止重新设置属性。
list1.forEach(element ->
list2.stream()
.filter(item -> element.getKey().equals(item.getKeyNextYear()))
.findAny()
.ifPresent(item -> {
element.setSummPreviosYear(item.getSumm());
element.setCashboxCountPreviosYear(item.getCashboxCount());
element.setCheckCountPreviosYear(item.getCheckCount());
element.setArticleCountPreviosYear(item.getArticleCount());
}));
无需流式传输list1并将其收集到新列表中,至少从您的示例代码中不清楚。原始列表仍将包含与新列表相同的元素,包括已更改的属性。
答案 1 :(得分:2)
要删除'if' - 语句,您可以先使用<script src="~/script/jquery-3.2.1.js">
:
filter
而且,我认为,最好将setter移动到新方法