一,有一个参数的groupby
第一个参数:按照该参数规则进行分组。结果返回一个Map集合,Map的key是按照该规则执行后返回的每个结果,Map的value是一个List集合,该集合中的值是能满足他能得到对应key的参数规则,但是还未被处理过的对象。结果形态:Map<String,List<Object>>,Object:根据实际情况显示
例子(初期化代码在最下面):
Map<String, List<Type>> map = list.stream().collect(groupingBy(Type::getName));
结果name为map的key,List<Type>为map的值。
二,有两个参数的groupby
第一个参数:按照该参数规则进行分组。结果返回一个Map集合,Map的key是该按照规则执行后返回的每个结果的字符串,Map的value是一个List集合,该集合中的值是能满足他能得到对应key的参数规则,但是还未被处理过的对象。第二个参数:是Collector类型,对value进行再次处理,并将结果对象更新成MAP的value。
结果形态:Map<String,Object>,Object:根据实际情况显示
例子(初期化代码在最下面):
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集合,Map的key是按照该规则执行后返回的每个结果的字符串,Map的value是一个List集合,该集合中的值是能满足他能得到对应key的参数规则,但是还未被处理过的对象。第二个参数:添加了对结果Map的生成方式,默认是HashMap(即我们要指定返回Map的具体类型,TreeMap,LinkedMap等)
第三个参数:是Collector类型,对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; } }
标签:Map,name,final,JAVA8,参数,key,Type,groupby,lambda From: https://www.cnblogs.com/l-liu/p/16975409.html