SupManCantFly 2020-07-25 16:47 采纳率: 33.3%
浏览 260
已采纳

stream() 必须搭配collect() ?

原先无法执行{}内的代码

    attrs.stream().map((attr) -> {
      SkuSaleAttrValueEntity skuSaleAttrValue = new SkuSaleAttrValueEntity();
      skuSaleAttrValue.setAttrId(attr.getAttrId());
      skuSaleAttrValueService.save(skuSaleAttrValue);
      return null;
    });

后来 ,增加了.collect(Collectors.toList())后就可以执行{}内的代码了

    attrs.stream().map((attr) -> {
      SkuSaleAttrValueEntity skuSaleAttrValue = new SkuSaleAttrValueEntity();
      skuSaleAttrValue.setAttrId(attr.getAttrId());
      skuSaleAttrValueService.save(skuSaleAttrValue);
      return null;
    })).collect(Collectors.toList());

请问我的猜想对么?
感激不尽

  • 写回答

3条回答 默认 最新

  • #朱守成# 2020-07-25 17:17
    关注

    直接用简单的例子告诉你结论是错的

    public class Main {
    
        public static void main(String[] args) {
            List<A> list = new ArrayList<>();
            list.add(new A("a", 1));
            list.add(new A("b", 2));
            list.add(new A("c", 3));
            System.out.println(list);
            list.stream().map(p -> {
                if ("b".equals(p.getName())) {
                    p.setAge(4);
                }
                return p;
            });
            System.out.println(list);
            list.stream().forEach(p -> {
                if ("b".equals(p.getName())) {
                    p.setAge(5);
                }
            });
            System.out.println(list);
        }
    
        static class A {
            private String name;
    
            private Integer age;
    
            A(String name, Integer age) {
                this.name = name;
                this.age = age;
            }
    
            @Override
            public String toString() {
                return "A{" +
                        "name='" + name + '\'' +
                        ", age=" + age +
                        '}';
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public Integer getAge() {
                return age;
            }
    
            public void setAge(Integer age) {
                this.age = age;
            }
        }
    }
    

    运行结果:
    图片说明

    stream()是将list转成流, collect()可以将流转成list。
    两个不同的结果是因为map方法与forEach方法的区别。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊