区别
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}