JAVA8 lambda之groupby三種用法
阿新 • • 發佈:2022-12-12
一,有一個引數的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;
}
}