如何使用lambda更好地做到这一点?

时间:2017-11-24 11:16:40

标签: java java-8

我不喜欢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());

2 个答案:

答案 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移动到新方法