【发布时间】:2022-06-18 22:21:47
【问题描述】:
在我的应用程序中,如果另一个列表不包含这些元素,我试图将列表的元素添加到另一个列表中。
我试图这样做:
List<String> list1 = dto.getList1() != null ? couponDto.getLis1(): new ArrayList<>();
list1.stream().filter(item -> !secondList.contains(item)).map(secondList::add);
像上面一样使用它时我没有收到任何错误,但项目没有添加到 secondList。在加速了太多时间之后,我能够像下面这样修复它:
List<String> list1 = dto.getList1() != null ? couponDto.getLis1(): new ArrayList<>();
list1.stream().filter(item -> !secondList.contains(item)).forEachOrdered(secondList::add);
我知道 map 用于将一个值映射到另一个值,所以这不是我通过将项目添加到列表中所做的事情。
谁能帮我理解这个?
谢谢
【问题讨论】:
-
流在调用终端操作之前不会执行,
map是一个中间操作。 -
另外,应该指出传递给
map的Function应该是non-interfering和stateless。 -
那为什么不使用
Set呢?
标签: arraylist foreach java-8 stream