`
zk_chs
  • 浏览: 215881 次
  • 性别: 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表达式为我们提供了很多简便的用法帮助我们进行开发,希望大家能有所收获

 

分享到:
评论

相关推荐

    C# 中的GroupBy的动态拼接问题及GroupBy&lt;&gt;用法介绍

    1. C# 中的GroupBy方法的基本语法和使用方法 2. 如何动态地指定分组的键 3. 使用反射机制来获取对象的属性值 4. 使用 lambda 表达式来指定分组的键 5. 使用ToDictionary方法将分组的结果转换为一个字典 6. 使用...

    Python在groupby分组后提取指定位置记录方法

    具体到本篇文章所提到的技术点,首先我们来了解groupby分组后如何提取指定位置的记录。在使用groupby进行分组后,pandas返回的是一个分组对象,这个对象是分组数据的集合,而不是单个数据的集合。在这种情况下,我们...

    Linq Grouping GroupBy 用法详解

    本文将深入探讨`GroupBy`方法的使用,包括其基本用法、多键分组以及在实际开发中的应用示例。 ### 1. 基本用法 `GroupBy`方法接收一个函数作为参数,该函数用于从每个元素中提取分组键。例如,如果你有一个`...

    lambda表达式解决java后台分组排序过程解析

    3.使用lambda表达式对数据进行分组:lambda表达式可以用来对数据进行分组,例如,使用`Collectors.groupingBy`方法对数据进行分组。 4.使用lambda表达式对数据进行排序:lambda表达式可以用来对数据进行排序,例如...

    详解Python中的分组函数groupby和itertools)

    在Python编程语言中,`groupby`和`itertools`是两个非常重要的工具,它们用于数据处理和分组操作。本文将深入解析这两个概念,并通过实例代码来展示它们的使用方法。 首先,`groupby`函数是Python标准库`itertools`...

    详解python中groupby函数通俗易懂

    本文将深入探讨`groupby()`函数的使用方法,帮助读者理解其核心概念,并通过实例来展示如何应用它进行数据处理。 1. **groupby()的基本功能** `groupby()`函数的主要作用是对DataFrame中的数据进行分组,并对每个...

    DataFrame.groupby()所见的各种用法详解

    `DataFrame.groupby()`是Pandas库中的一个核心方法,它允许我们根据数据的某些特性进行分组操作,从而方便地对数据进行聚合分析。在本文中,我们将深入探讨`groupby()`的各种用法,并通过示例代码来理解其功能。 ...

    pandas获取groupby分组里最大值所在的行方法

    首先,使用pandas的`groupby`方法可以轻松实现数据的分组。分组之后,每个组都是一个独立的数据子集。然后,可以使用不同的方法在每个组中找到最大值所在的行。 第一种方法是使用`apply`函数结合lambda表达式。通过...

    Q703207 list如何实现动态分组

    在Python的pandas库中,`DataFrame`对象提供了`groupby`方法,可以按照指定的列进行分组。 对于list而言,如果我们想要实现类似的功能,但list不直接支持`groupby`操作,我们可以采用以下几种策略: 1. **自定义...

    C#连接数据库 —— (二)Linq To EF 的 lambda表达式使用 ,增删查改、判断、分组、排序

    var groupedList = DataModelsDb.CheZhan.GroupBy(c =&gt; c.ZhanMing.Length) .Select(g =&gt; new { GroupSize = g.Key, Stations = g }) .ToList(); ``` 上述代码将站名长度相同的站名分组,并返回每组的长度和站名...

    基于Lambda表达式的SQL语句生成器SqlLink V0.1

    .GroupBy(u =&gt; u.Age) .OrderByDescending(g =&gt; g.Key) .Select(u =&gt; new { Age = g.Key, Count = g.Count() }) .ToSql(); ``` SqlLink的这种设计模式让开发者能够专注于业务逻辑,而不必过多关注SQL语句的...

    DataTable分组

    2. 使用`DefaultView`属性获取DataView,并调用`GroupBy()`方法进行分组。`GroupBy()`方法接受一个或多个列名,根据这些列的值来分组数据。 ```csharp DataView dv = dt.DefaultView; dv.Sort = "Category"; // 先...

    Lambda表达式的前世今生 - 文章 - 伯乐在线1

    此外,Lambda表达式也常用于 LINQ 方法链,如`Where`、`Select`和`GroupBy`等,简化了数据过滤、转换和分组的操作。 Lambda表达式在C# 3.0及后续版本中的引入,使得代码更加简洁、易读,同时促进了函数式编程思想在...

    Java8中lambda表达式的应用及一些泛型相关知识

    泛型在这里也发挥了重要作用,`groupBy`方法的泛型参数`&lt;K&gt;`允许我们使用任何类型作为分组键。这样,我们就可以将分组逻辑从具体实现中解耦出来,提高了代码的可重用性和可维护性。 总结来说,Java8的Lambda表达式...

    C# Linq lambda表达式.doc

    虽然示例中没有直接展示分组操作,但`GroupBy()`方法可以用于将数据按照特定键进行分组。例如: ```csharp var groups = collection.GroupBy(c =&gt; c.Property).ToList(); ``` 这将按照`Property`字段对`...

    Lambda表达式、扩展方法与通用集合运算符

    4. **GroupBy**:按特定条件分组数据。 5. **Join**:连接多个集合。 6. **SelectMany**:扁平化嵌套序列。 7. **Aggregate**:聚合数据,例如计算总和、平均值等。 8. **Take/TakeWhile**:获取满足条件的前n个元素...

    排序后分组

    在关系型数据库中,这通常对应于SQL的GROUP BY语句,用于统计每个分组的聚合信息,如计数、求和、平均值等。在编程中,我们可以使用各种数据结构,如哈希表或字典,来实现分组功能。 描述中提到的“类似微信通讯录...

    Pandas之groupby( )用法笔记小结

    在这个例子中,我们创建了一个DataFrame `df`,然后使用`groupby('Q')`将数据按照'Q'列进行分组。 **`apply()`与`agg()`的区别:** 1. `apply()`: 这个函数接收一个函数,该函数将应用于每个分组后的子DataFrame。...

    LINQ入门教程(Linq Lambda)

    例如,`group m by m.Name into g`创建了一个分组,然后`select new { MethodName = g.Key, Overload = g.Count() }`构建了一个匿名类型实例,其中包含了方法名和方法数量,类似于自定义的聚合结果。 LINQ的另一个...

Global site tag (gtag.js) - Google Analytics