reduce()操作
定义:前一个操作的结果会传递给下一个操作继续执行,即前一轮reduce操作的结果会作为参数传递给下一轮reduce的参数
使用场景:对集合求和,求集合的最大值,求集合的最小值。
public class Main {public static void main(String[] args) throws Exception {int sum = Stream.of(1, 2, 3, 4, 5).reduce((item1, item2) -> item1 + item2).get();System.out.println(sum);// int value = Stream.of(1, 2, 3, 4, 5).reduce(new BinaryOperator<Integer>() {// @Override// public Integer apply(Integer integer, Integer integer2) {// return integer+integer2;// }// }).get();//// System.out.println(value);// int value = Stream.of(1, 2, 3, 4, 5).reduce(100,(item1,item2)->item1+item2);// System.out.println(value);int value = Stream.of(1645, 234345, 32, 44434, 564534, 435, 34343542, 212).reduce((item1, item2) -> item1 > item2 ? item1 : item2).get();System.out.println(value);}}
groupingBy操作 定义:对一个流的划分不同的分组,并返回这个分组的key,类似于mysql中的分组概念。
适用场景:对于一个流进行多分类时使用,返回的是分类的key
public class Main {public static void main(String[] args) throws Exception {List<Student> students = Arrays.asList(new Student("广东", 23), new Student("广东", 24),new Student("广东", 23),new Student("北京", 22), new Student("北京", 20),new Student("北京", 20), new Student("海南", 25));//根据省份进行划分,注意怎么看返回类型!!!!Map<String,List<Student>> listMap = students.stream().collect(Collectors.groupingBy(obj->obj.getProvince()));listMap.forEach((key,value)->{System.out.println("=======");System.out.println(key);value.forEach(obj->{System.out.println(obj.getAge());});});}}class Student {private int age;private String province;public Student(String province, int age) {this.province = province;this.age = age;}public Student() {}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}}
partitionBy操作
定义:将一个流分为两个分组,注意只能partitionBy只能将一个流中的数据分为两个分组。
适用场景:对一个流的操作需要分为两类,并且者两类之间有明显的界限
/*** partitioningBy():将条件为true的分为一组集合,条件为false的分为一组集合* {false=[java, CSS3], true=[springboot, HTML5]}*/public class Main {public static void main(String[] args) throws Exception {List<String> list = Arrays.asList("java", "springboot", "HTML5", "CSS3");Map<Boolean, List<String>> result = list.stream().collect(Collectors.partitioningBy(obj -> obj.length() > 4));System.out.println(result);}}
jion操作
定义:将stream流中的元素用指定的连接符连接起来并返回一个字符串
public class Main {public static void main(String[] args) throws Exception {List<String> list = Arrays.asList("springboot教程","springcloud教程","java教程","架构教程");String result1 = list.stream().collect(Collectors.joining());System.out.println(result1);String result2 = list.stream().collect(Collectors.joining("||"));System.out.println(result2);String result3 = list.stream().collect(Collectors.joining("||","[","]"));System.out.println(result3);List<String> list1 = Arrays.asList("springboot","mysql","html5","css3");System.out.println(list1);//快速创建一个带分隔符带stringString result = Stream.of("springboot","mysql","html5","css3").collect(Collectors.joining(",","[","]"));System.out.println(result);}}
summarizing操作
定义:一个方法把统计学上的功能都完成,包括求平均值,求最大值,求数量,求和等等
分类:summarizingInt、 summarizingLong 、summarizingDouble
public class Main {public static void main(String[] args) throws Exception {List<Student> students = Arrays.asList(new Student("广东", 23), new Student("广东", 24),new Student("广东", 23),new Student("北京", 22), new Student("北京", 20),new Student("北京", 20), new Student("海南", 25));IntSummaryStatistics summaryStatistics = students.stream().collect(Collectors.summarizingInt(Student::getAge));System.out.println("平均值"+summaryStatistics.getAverage());System.out.println("人数"+summaryStatistics.getCount());System.out.println("最大值"+summaryStatistics.getMax());System.out.println("最小值"+summaryStatistics.getMin());System.out.println("总和"+summaryStatistics.getSum());}}class Student {private int age;private String province;public Student(String province, int age) {this.province = province;this.age = age;}public Student() {}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}}
流式操作的总结
普通集合通过stream()转为流
通过filter()/map()来将筛选/转换流上的每一个元素
通过collect()来收集流
比如收集统计信息/收集分类信息/仅仅只是收集为一个新的list或map或set
文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




