JAVA8 lambda之groupby三种用法
一,有一个参数的groupby
第一个参数:按照该参数规则进行分组,规则的结果为整个结果Map的key。结果形态:Map<String,List<Object>>,Object:根据实际情况显示。结果返回一个Map集合,Map的key是按照该规则执行后返回的每个结果,Map的value是一个List集合,该集合中的值是能满足他能得到对应key的参数规则,但是还未被处理过的对象。
例子(初期化代码在最下面):
Map<String, List<Type>> map = list.stream().collect(groupingBy(Type::getName));
结果name为map的key,List<Type>为map的值。
二,有两个参数的groupby
第一个参数:按照该参数规则进行分组,规则的结果为整个结果Map的key。第二个参数:是Collector类型,以上面“有一个参数的groupby”的value为基础,对value进行再次处理,并将结果对象更新成Map的value。
结果形态:Map<String,Object>,Object:根据实际情况显示,结果返回一个Map集合,Map的key是该按照第一个参数的规则执行后返回的每个结果的字符串,Map的value是再次被处理后的的对象。
例子(初期化代码在最下面):
final Map<String, Long> result2 = list.stream()
.collect(Collectors.groupingBy(Type::getName, Collectors.counting()))
结果name为map的key,分组name的个数为map的值({name=2, name2=1})。
三,有三个参数的的groupby
第一个参数:按照该参数规则进行分组,规则的结果为整个结果Map的key。第二个参数:添加了对结果Map的生成方式,默认是HashMap(即我们要指定返回Map的具体类型,TreeMap,LinkedMap等)
第三个参数:是Collector类型,以上面“有一个参数的groupby”的value为基础,对value进行再次处理,并将结果对象更新成Map的value。
例子(初期化代码在最下面):
final Map<String, Map<String, List<Type>>> result3 = list.stream()
.collect(Collectors.groupingBy(Type::getName, LinkedHashMap::new, Collectors.groupingBy(Type::getAge)));
final Type type1 = new Type();
final Type type2 = new Type();
final Type type3 = new Type();
type1.setAge("11");
type1.setName("name");
type2.setAge("22");
type2.setName("name2");
type3.setAge("22");
type3.setName("name");
final List<Type> list = List.of(type1, type2, type3);
public class Type {
String name;
String age;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(final String age) {
this.age = age;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧