【问题标题】:Java 8 stream foreach vs mapJava 8 流 foreach 与 map
【发布时间】: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


【解决方案1】:

一旦您拥有流式数据,您需要调用终端函数(例如:forEach、collect)来完成操作。在您的代码中,forEachOrdered 是终端操作,但 map 不是,所以它起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2017-01-28
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多