【Java】【stream】map()、peek()、foreach()

文章目录

区别

peek()无法修改返回值类型,map()可以修改返回数据类型,都会返回stream,peek()是接收Consumer表达式没有返回值,map()接收的入参是Function表达式,之前搜索的时候看到的都是说peek()没有返回,peek不接收返回根本不会执行。

foreach()会中断流,很多操作需要再进行一次流处理。如先需要处理某属性的值,再根据条件筛选出需要的值,foreach()需要在修改后再进行一次流处理,如果是map(),就可以在不中断流的情况下连续处理。

用处

peek最初是设计说是用于debug调试,方便查看stream内进行处理的每个元素,我日。使用steam.peek()必须对流进行一次处理再产生一个新的stream。
map用于修改返回值类型,获取list中某些值,比如获取学生列表中所有学生的姓名。

示例

之前遇到的一个需求,导出报表的时候需要给数据加上排序序号

List<Student> studentList = new ArrayList<>();
studentList.add(new Student("张一", 1, 13, "3"));
studentList.add(new Student("张二", 2, 13, "4"));
studentList.add(new Student("张三", 3, 14, "4"));
studentList.add(new Student("老王", 4, 14, "2"));
studentList.add(new Student("张四", 1, 15, "3"));
studentList.add(new Student("张五", 2, 16, "1"));
studentList.add(new Student("张六", 3, 17, "3"));
studentList.add(new Student("张七", 3, 18, "5"));
studentList.add(new Student("老王", 1, 15, "1"));
studentList.add(new Student("张八", 5, 15, "3"));
studentList.add(new Student("张九", 2, 15, null));
studentList.add(new Student("老王", 4, 13, null));

Integer[] arr = {1};

// map获取名称,得到String类型,peek输出
System.out.println("============================================map");
List<String> collect = studentList.stream().map(Student::getStuName)
                .peek(System.out::println)
                .collect(Collectors.toList());

//peek修改数据
System.out.println("============================================peek");
List<Student> collectPeek = studentList.stream().peek(e -> e.setOrder((arr[0]++)))
                .peek(System.out::println).collect(Collectors.toList());
        

============================================map
张一
张二
张三
老王
张四
张五
张六
张七
老王
张八
张九
老王
============================================peek
Student{stuName=‘张一’, stuId=1, stuAge=13, classNum=‘3’, order=1}
Student{stuName=‘张二’, stuId=2, stuAge=13, classNum=‘4’, order=2}
Student{stuName=‘张三’, stuId=3, stuAge=14, classNum=‘4’, order=3}
Student{stuName=‘老王’, stuId=4, stuAge=14, classNum=‘2’, order=4}
Student{stuName=‘张四’, stuId=1, stuAge=15, classNum=‘3’, order=5}
Student{stuName=‘张五’, stuId=2, stuAge=16, classNum=‘1’, order=6}
Student{stuName=‘张六’, stuId=3, stuAge=17, classNum=‘3’, order=7}
Student{stuName=‘张七’, stuId=3, stuAge=18, classNum=‘5’, order=8}
Student{stuName=‘老王’, stuId=1, stuAge=15, classNum=‘1’, order=9}
Student{stuName=‘张八’, stuId=5, stuAge=15, classNum=‘3’, order=10}
Student{stuName=‘张九’, stuId=2, stuAge=15, classNum=‘null’, order=11}
Student{stuName=‘老王’, stuId=4, stuAge=13, classNum=‘null’, order=12}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值