`
zk_chs
  • 浏览: 213115 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Lambda中groupBy分组用法

 
阅读更多

这次的博客给大家带来点lambda中groupBy分组语法的使用

 

首先我们新建一个对象,通过这个对象的集合来进行学习:

@Data
@Builder
public class Person (){
      private int grade;
      private boolean isBoy;
}

 很简单的一个类,grade表示年级,isBoy表示性别,男为true;

@Data、@Builder为lombok插件的注解,帮助我们生成get/set/equals/toString/Builder等方法

 

下面我们建立测试类:

public class GroupBy_Lambda{
      omitted....
}

 

首先我们建立一个集合并初始化:

private static List<Person> init (){
        List<Person> persons = new ArrayList<>();
        for ( int i = 0; i < 20; i++ ){
            Person.PersonBuilder personBuilder = Person.builder();
            personBuilder.grade(i % 2);
            Person person = i % 2 == 0 ? personBuilder.isBoy(true).build()  : personBuilder.isBoy(false).build();
            persons.add(person);
        }
        return persons;
    }

 

接下来我们进行分组:

 List<Person> persons = init();
 Map<Integer, List<Person>> groupByGrade = persons.stream()
                .collect(groupingBy(Person::getGrade));
System.out.println(groupByGrade);

 这里,我们是根据grade进行了分组,key为grade,value为相应Person的集合。

persons.stream():将集合转为流,之后便能使用lambda表达式

.collect():相当于一个收集器,可以将我们分组后的流进行收集

groupingBy():我们本次分组所使用的分组工具、按照grade进行分组

Person::getGrade:调用Person的getGrade方法

 

输出的结果为:

{0=[Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true), Person(grade=0, isBoy=true)], 
1=[Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false), Person(grade=1, isBoy=false)]}

 可以看到,我们已经完成了按照grade进行分组的工作。

 

如果还想要进一步进行提取的话,groupingBy()还为我们提供了更多的方法,比如:

Map<Integer, List<Boolean>> groupByGrade_sex = persons.stream()
                .collect(groupingBy(Person::getGrade,
                        mapping(Person::isBoy, toList())));
System.out.println(groupByGrade_sex)

 我们在groupingBy方法的内部,又进行了细分,只取出isBoy这个字段的值并收集

 

下面是输出的结果:

{0=[true, true, true, true, true, true, true, true, true, true], 
1=[false, false, false, false, false, false, false, false, false, false]}

 

 

lambda表达式为我们提供了很多简便的用法帮助我们进行开发,希望大家能有所收获

 

分享到:
评论

相关推荐

    Linq基础学习资料,通俗易懂

    6.2.6 GroupBy 分组 17 6.2.7 Join 联合查询 18 6.2.8 GroupJoin 18 6.2.9 Take 获取集合的前n个元素 19 6.2.10 Skip 跳过集合的前n个元素 19 6.2.11 Distinct 过滤集合中的相同项 19 6.2.12 Union 连接不同...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    14.4.7 使用GroupBy分组结果 415 14.4.8 使用GroupJoin()实现一对多关系 416 14.4.9 调用Selectmany() 418 14.4.10 更多标准查询操作符 420 14.5 小结 423 第15章 使用查询表达式的LINQ 425 ...

    轻松学C#(图解版)

    7.3.2 使用方法 121 7.3.3 派生类直接访问基类成员——base 122 7.3.4 继承中的构造函数 123 7.4 多态 124 7.5 抽象 128 7.5.1 抽象类、抽象方法的声明 129 7.5.2 抽象类的使用 129 7.5.3 抽象方法的使用 130 7.6 ...

    Python Cookbook

    11.2 避免在编写回调函数时使用lambda 404 11.3 在tkSimpleDialog函数中使用默认值和区间 405 11.4 给Tkinter列表框增加拖曳排序能力 406 11.5 在Tkinter部件中输入一个重音字符 408 11.6 在Tkinter中嵌入内联的...

    ASP.NET3.5从入门到精通

    2.5.1 if 语句的使用方法 2.5.2 switch 选择语句的使用 2.6 使用循环语句 2.6.1 for 循环语句 2.6.2 while 循环语句 2.6.3 do while 循环语句 2.6.4 foreach 循环语句 2.7 异常处理语句 2.7.1 throw 异常语句 2.7.2 ...

    ASP.NET 3.5 开发大全word课件

    2.5.1 if语句的使用方法 2.5.2 switch选择语句的使用 2.6 使用循环语句 2.6.1 for循环语句 2.6.2 while循环语句 2.6.3 do while循环语句 2.6.4 foreach循环语句 2.7 异常处理语句 2.7.1 throw异常语句 2.7.2 try-...

    ASP.NET 3.5 开发大全11-15

    2.5.1 if语句的使用方法 2.5.2 switch选择语句的使用 2.6 使用循环语句 2.6.1 for循环语句 2.6.2 while循环语句 2.6.3 do while循环语句 2.6.4 foreach循环语句 2.7 异常处理语句 2.7.1 throw异常语句 2.7.2 try-...

    ASP.NET 3.5 开发大全

    2.5.1 if语句的使用方法 2.5.2 switch选择语句的使用 2.6 使用循环语句 2.6.1 for循环语句 2.6.2 while循环语句 2.6.3 do while循环语句 2.6.4 foreach循环语句 2.7 异常处理语句 2.7.1 throw异常语句 2.7.2 try-...

    ASP.NET 3.5 开发大全1-5

    2.5.1 if语句的使用方法 2.5.2 switch选择语句的使用 2.6 使用循环语句 2.6.1 for循环语句 2.6.2 while循环语句 2.6.3 do while循环语句 2.6.4 foreach循环语句 2.7 异常处理语句 2.7.1 throw异常语句 2.7.2 try-...

    ASPNET35开发大全第一章

    2.5.1 if语句的使用方法 2.5.2 switch选择语句的使用 2.6 使用循环语句 2.6.1 for循环语句 2.6.2 while循环语句 2.6.3 do while循环语句 2.6.4 foreach循环语句 2.7 异常处理语句 2.7.1 throw异常语句 2.7.2 try-...

Global site tag (gtag.js) - Google Analytics