public static void main(String[] args) {List<Person> personList = new ArrayList<>();personList.add(new Person("张三", 1000, 20, "男", "北京"));personList.add(new Person("李四", 2000, 21, "男", "南京"));personList.add(new Person("王五", 3000, 20, "女", "合肥"));personList.add(new Person("赵六", 4000, 22, "男", "四川"));personList.add(new Person("孙七", 5000, 25, "女", "上海"));// 统计员工人数、平均工资、工资总额、最高工资// 员工总人数long count = personList.stream().count();// 平均工资Double average = personList.stream().collect(Collectors.averagingDouble(Person::getSalary));// 最高工资Optional<Integer> max = personList.stream().map(Person::getSalary).max(Integer::compare);// 工资之和int sum = personList.stream().mapToInt(Person::getSalary).sum();// 一次性统计所有信息DoubleSummaryStatistics collect = personList.stream().collect(Collectors.summarizingDouble(Person::getSalary));System.out.println("员工总人数:" + count);System.out.println("员工平均工资:" + average);System.out.println("员工工资总和:" + sum);System.out.println("员工工资所有统计:" + collect);}
结果:

文章插图
6.3分组(partitioningBy/groupingBy)
- 分区:将
stream
按条件分为两个Map
, 比如员工按薪资是否高于8000分为两部分 。 - 分组:将集合分为多个Map , 比如员工按性别分组 。有单级分组和多级分组 。
public static void main(String[] args) {List<Person> personList = new ArrayList<>();personList.add(new Person("张三", 1000, 20, "男", "北京"));personList.add(new Person("李四", 2000, 21, "男", "南京"));personList.add(new Person("王五", 3000, 20, "女", "合肥"));personList.add(new Person("赵六", 4000, 22, "男", "合肥"));personList.add(new Person("孙七", 5000, 25, "女", "上海"));// 按薪资高于3000分组Map<Boolean, List<Person>> salaryGroup = personList.stream().collect(Collectors.partitioningBy(p -> p.getSalary() > 3000));List<Person> group1 = salaryGroup.get(true);List<Person> group2 = salaryGroup.get(false);for (Person person : group1) {System.out.println("薪资高于3000元组:" + person);}for (Person person : group2) {System.out.println("薪资低于3000元组:" + person);}// 按性别分组Map<String, List<Person>> sexGroup = personList.stream().collect(Collectors.groupingBy(Person::getSex));List<Person> group3 = sexGroup.get("男");List<Person> group4 = sexGroup.get("女");for (Person person : group3) {System.out.println("男子组:" + person);}for (Person person : group4) {System.out.println("女子组:" + person);}// 将员工先按性别分组 , 再按地区分组Map<String, Map<String, List<Person>>> group = personList.stream().collect(Collectors.groupingBy(Person::getSex, Collectors.groupingBy(Person::getArea)));Map<String, List<Person>> manGroup = group.get("男");Map<String, List<Person>> womenGroup = group.get("女");List<Person> group5 = manGroup.get("合肥");List<Person> group6 = womenGroup.get("上海");System.out.println("地区在合肥的男子组:" + group5);System.out.println("地区在上海的女子组:" + group6);}
结果:
文章插图
6.4接合(joining)
joining
可以将stream中的元素用特定的连接符(没有的话 , 则直接连接)连接成一个字符串 。public static void main(String[] args) {List<Person> personList = new ArrayList<>();personList.add(new Person("张三", 1000, 20, "男", "北京"));personList.add(new Person("李四", 2000, 21, "男", "南京"));personList.add(new Person("王五", 3000, 20, "女", "合肥"));personList.add(new Person("赵六", 4000, 22, "男", "合肥"));personList.add(new Person("孙七", 5000, 25, "女", "上海"));String persons = personList.stream().map(p -> p.getName() + "-" + p.getSex() + "-" + p.getSalary()).collect(Collectors.joining(","));System.out.println("所有员工信息:" + persons);}
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 苦瓜汤为什么要放黄豆
- 含熔喷布口罩能防病毒吗
- 22年平安夜是几月几日
- 苏打饼干含糖量高吗
- 奶茶店的果茶的危害
- 国旗护卫队138步和96步含义
- 立秋会凉快吗
- 达梦dba_segments指定表名查询到的大小都包含哪些数据
- Object Detection 【YOLOv5】LabVIEW+YOLOv5快速实现实时物体识别含源码
- 电蚊液有毒吗?需要开窗吗