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

den*_*a08 2 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());
Run Code Online (Sandbox Code Playgroud)

Mal*_*wig 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());
                     }));
Run Code Online (Sandbox Code Playgroud)

没有必要将list1流式传输并将其收集到一个新列表中,至少从您的示例代码中不清楚.原始列表仍将包含与新列表相同的元素,包括已更改的属性.

  • 如果有多个项目具有相同的keyNextYear,则不等于发布的代码. (2认同)