1. 程式人生 > 其它 >JAVA8 lambda之groupby三種用法

JAVA8 lambda之groupby三種用法

一,有一個引數的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;
    }

}