暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java新特性解读JDK8之收集器partitioningBy和groupingBy分组函数

227decision 2020-02-29
1475

partitioningBy

返回值Map<Boolean, List<T>>,key是Boolean类型,只能分两组

使用如下:

    package com.example.streamdemo;


    import java.util.Arrays;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;


    public class PartitioningByDemo {

    public static void main(String[] args) {
    List<Integer> asList = Arrays.asList(1,2,3,80,90,100);
    Map<Boolean, List<Integer>> map = asList.stream().collect(Collectors.partitioningBy(obj->obj>60));
    List<Integer> list = map.get(true);
    List<Integer> list2 = map.get(false);
    System.out.println(list);
    System.out.println(list2);
    }
    }

    groupingBy

    可以根据各种属性进行分组,分组个数不受限制,并且可以分组后统计个数

    使用如下:

      package com.example.streamdemo;


      import java.util.Arrays;
      import java.util.List;
      import java.util.Map;
      import java.util.stream.Collectors;


      public class GroupingByDemo {
      public static void main(String[] args) {
      //分组
      List<Person> asList = Arrays.asList(new Person(20, "jack"),new Person(20, "tony"),new Person(22, "jerry"),
      new Person(22, "marry"),new Person(25, "jony"),new Person(25, "bob"),new Person(27, "james"));
      Map<Integer, List<Person>> map = asList.stream().collect(Collectors.groupingBy(obj->obj.getAge()));
      map.forEach((key,value)->{
      System.out.println(key+"==");
      value.forEach(obj->System.out.println(obj.getName()));

      });

      //分组统计
      Map<Integer, Long> map2 = asList.stream().collect(Collectors.groupingBy(obj->obj.getAge(), Collectors.counting()));
      map2.forEach((key,value)->{
      System.out.println(key+"年龄人数:"+map2.get(key));
      });
      }


      }


      class Person{

      private int age;
      private String name;

      public Person() {
      super();
      }
      public Person(int age, String name) {
      super();
      this.age = age;
      this.name = name;
      }
      public int getAge() {
      return age;
      }
      public void setAge(int age) {
      this.age = age;
      }
      public String getName() {
      return name;
      }
      public void setName(String name) {
      this.name = name;
        }
      }



      文章转载自227decision,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论