首页 > 编程语言 >【java技术总结】stream来处理分组问题

【java技术总结】stream来处理分组问题

时间:2022-11-27 11:01:13浏览次数:35  
标签:java stream Collectors Person groupingBy 分组 new users

1.使用Collectors.groupingBy(方法引用返回分组属性作为k)
2.使用Collectors.groupingBy(方法引用返回分组属性作为k,Collectors的静态类返回值)
3.使用reduce归并数据,reduce(存储新数据对象类型,新类型初始化,归并到同一个对象中)

        List<Person> users = Arrays.asList(
                new Person(18, "张三", "123", 1),
                new Person(19, "李四", "124", 0),
                new Person(20, "王五", "125", 1),
                new Person(21, "赵六", "126", 0),
                new Person(22, "田七", "127", 1),
                new Person(24, "孙八", "128", 0),
                new Person(27, "周九", "129", 1));
        //根据性别分组
        Map<Integer, List<Person>> group1 = users.stream().collect(Collectors.groupingBy(Person::getSex));
//        group1.values().forEach(System.out::println);
//        group1.entrySet().forEach(System.out::println);
        //根据年龄段分组
        Map<String, List<Person>> group2 = users.stream().collect(Collectors.groupingBy(u -> {
            int age = u.getAge();
            if (age >= 18 && age <= 20) {
                return "18-20";
            } else if (age >= 21 && age <= 23) {
                return "21-23";
            } else if (age >= 24 && age <= 26) {
                return "24-26";
            }else {
                return "else";
            }
        }));
//        group2.entrySet().forEach(System.out::println);
        //统计性别人数
        Map<Integer, Long> group3 = users.stream().collect(Collectors.groupingBy(Person::getSex,Collectors.counting()));
        group3.entrySet().forEach(System.out::println);

        //使用reduce来实现统计性别人数
        Map<Integer, Long> group4 = users.stream().reduce(new HashMap<Integer,Long>(),(m,p)->{
            m.put(p.getSex(),m.getOrDefault(p.getSex(),0L)+1);
            return m;
        },(m1,m2)->{
            m1.putAll(m2);
            return m1;
        });
//        group4.entrySet().forEach(System.out::println);

标签:java,stream,Collectors,Person,groupingBy,分组,new,users
From: https://www.cnblogs.com/blanset/p/16929137.html

相关文章

  • Java:Spring Boot整合mybatis-plus示例
    文档​​https://start.spring.io/​​mybatis-plus​​文档​​​|​​github​​maven​​文档​​p6spy​​文档​​​|​​github​​使用示例目录​​使用示......
  • JavaScript中String的match方法详解
     String.prototype.match()**String.prototype.match()方法返回通过一个正则表达式匹配到的字符串结果。**​​var='Thequickbrownfoxjumpsoverthelazydog.Itba......
  • Java程序运行机制、注释及标识符 关键字
    Java程序运行机制1.编写编写是指在Java开发环境中进行程序代码的编辑,最终生成后缀名为“.java”的Java源文件。2.编译编译是指使用Java编译器对源文件进行错误排查的过......
  • 面向对象的JavaScript框架 MooTools
    MooTools是一个简洁,模块化,面向对象的JavaScript框架。它能够帮助你更快,更简单地编写可扩展和兼容性强的JavaScript代码。Mootools从Prototype.js中汲取了许多有益的设计理......
  • datatable使用groupby进行分组统计 .
    如何在datatable中进行分组,并且计算分组后每组的数量,想了一下,可以使用LINQ来实现datatable分组。代码如下 效果区域   库房         数量北京---北京仓库---......
  • Java: ArrayList
    The ArrayList classisaresizable array,whichcanbefoundinthe java.util package.Thedifferencebetweenabuilt-inarrayandan ArrayList inJava,......
  • Java: LinkedList
    The LinkedList classisalmostidenticaltothe ArrayList:importjava.util.LinkedList;publicclassMain{publicstaticvoidmain(String[]args){......
  • Java: Date and Time
    Javadoesnothaveabuilt-inDateclass,butwecanimportthe java.time packagetoworkwiththedateandtimeAPI.ClassDescriptionLocalDateRepresent......
  • Java: User Input (Scanner)
    The Scanner classisusedtogetuserinput,anditisfoundinthe java.util package.Tousethe Scanner class,createanobjectoftheclassandusean......
  • Java: Enums
    An enum isaspecial"class"thatrepresentsagroupof constants (unchangeablevariables,like final variables).enumLevel{LOW,MEDIUM,HIGH}......