这次的博客给大家带来点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表达式为我们提供了很多简便的用法帮助我们进行开发,希望大家能有所收获
相关推荐
1. C# 中的GroupBy方法的基本语法和使用方法 2. 如何动态地指定分组的键 3. 使用反射机制来获取对象的属性值 4. 使用 lambda 表达式来指定分组的键 5. 使用ToDictionary方法将分组的结果转换为一个字典 6. 使用...
具体到本篇文章所提到的技术点,首先我们来了解groupby分组后如何提取指定位置的记录。在使用groupby进行分组后,pandas返回的是一个分组对象,这个对象是分组数据的集合,而不是单个数据的集合。在这种情况下,我们...
本文将深入探讨`GroupBy`方法的使用,包括其基本用法、多键分组以及在实际开发中的应用示例。 ### 1. 基本用法 `GroupBy`方法接收一个函数作为参数,该函数用于从每个元素中提取分组键。例如,如果你有一个`...
3.使用lambda表达式对数据进行分组:lambda表达式可以用来对数据进行分组,例如,使用`Collectors.groupingBy`方法对数据进行分组。 4.使用lambda表达式对数据进行排序:lambda表达式可以用来对数据进行排序,例如...
在Python编程语言中,`groupby`和`itertools`是两个非常重要的工具,它们用于数据处理和分组操作。本文将深入解析这两个概念,并通过实例代码来展示它们的使用方法。 首先,`groupby`函数是Python标准库`itertools`...
本文将深入探讨`groupby()`函数的使用方法,帮助读者理解其核心概念,并通过实例来展示如何应用它进行数据处理。 1. **groupby()的基本功能** `groupby()`函数的主要作用是对DataFrame中的数据进行分组,并对每个...
`DataFrame.groupby()`是Pandas库中的一个核心方法,它允许我们根据数据的某些特性进行分组操作,从而方便地对数据进行聚合分析。在本文中,我们将深入探讨`groupby()`的各种用法,并通过示例代码来理解其功能。 ...
首先,使用pandas的`groupby`方法可以轻松实现数据的分组。分组之后,每个组都是一个独立的数据子集。然后,可以使用不同的方法在每个组中找到最大值所在的行。 第一种方法是使用`apply`函数结合lambda表达式。通过...
在Python的pandas库中,`DataFrame`对象提供了`groupby`方法,可以按照指定的列进行分组。 对于list而言,如果我们想要实现类似的功能,但list不直接支持`groupby`操作,我们可以采用以下几种策略: 1. **自定义...
var groupedList = DataModelsDb.CheZhan.GroupBy(c => c.ZhanMing.Length) .Select(g => new { GroupSize = g.Key, Stations = g }) .ToList(); ``` 上述代码将站名长度相同的站名分组,并返回每组的长度和站名...
.GroupBy(u => u.Age) .OrderByDescending(g => g.Key) .Select(u => new { Age = g.Key, Count = g.Count() }) .ToSql(); ``` SqlLink的这种设计模式让开发者能够专注于业务逻辑,而不必过多关注SQL语句的...
2. 使用`DefaultView`属性获取DataView,并调用`GroupBy()`方法进行分组。`GroupBy()`方法接受一个或多个列名,根据这些列的值来分组数据。 ```csharp DataView dv = dt.DefaultView; dv.Sort = "Category"; // 先...
此外,Lambda表达式也常用于 LINQ 方法链,如`Where`、`Select`和`GroupBy`等,简化了数据过滤、转换和分组的操作。 Lambda表达式在C# 3.0及后续版本中的引入,使得代码更加简洁、易读,同时促进了函数式编程思想在...
泛型在这里也发挥了重要作用,`groupBy`方法的泛型参数`<K>`允许我们使用任何类型作为分组键。这样,我们就可以将分组逻辑从具体实现中解耦出来,提高了代码的可重用性和可维护性。 总结来说,Java8的Lambda表达式...
虽然示例中没有直接展示分组操作,但`GroupBy()`方法可以用于将数据按照特定键进行分组。例如: ```csharp var groups = collection.GroupBy(c => c.Property).ToList(); ``` 这将按照`Property`字段对`...
4. **GroupBy**:按特定条件分组数据。 5. **Join**:连接多个集合。 6. **SelectMany**:扁平化嵌套序列。 7. **Aggregate**:聚合数据,例如计算总和、平均值等。 8. **Take/TakeWhile**:获取满足条件的前n个元素...
在关系型数据库中,这通常对应于SQL的GROUP BY语句,用于统计每个分组的聚合信息,如计数、求和、平均值等。在编程中,我们可以使用各种数据结构,如哈希表或字典,来实现分组功能。 描述中提到的“类似微信通讯录...
在这个例子中,我们创建了一个DataFrame `df`,然后使用`groupby('Q')`将数据按照'Q'列进行分组。 **`apply()`与`agg()`的区别:** 1. `apply()`: 这个函数接收一个函数,该函数将应用于每个分组后的子DataFrame。...
例如,`group m by m.Name into g`创建了一个分组,然后`select new { MethodName = g.Key, Overload = g.Count() }`构建了一个匿名类型实例,其中包含了方法名和方法数量,类似于自定义的聚合结果。 LINQ的另一个...