首页 > 编程语言 >JAVA8 lambda之groupby三种用法

JAVA8 lambda之groupby三种用法

时间:2022-12-12 10:46:25浏览次数:60  
标签:Map name final JAVA8 参数 key Type groupby lambda

一,有一个参数的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

相关文章

  • <八>lambda表达是应用实践
    既然lambda表达式只能使用在语句中,如果想跨语句使用之前定义好的lambda表达式,怎么办?用什么类型来表示lambda表达式?用function类型来表示函数对象类型bind1st/bind2nd......
  • <七>lambda表达式实现原理
    C++11函数对象的升级版=>lambda表达式函数对象的缺点:使用在泛型算法,参数传递,比较性质/自定义操作优先级队列,需要专门定义出一个类//lambda表达式语法://[捕获......
  • DAX:GROUPBY函数
    DAX中的SUMMARIZE函数功能强大,但同时也很难使用。它可用于执行表之间的分组和连接,正如我们之前在分组数据一文中描述的那样。不幸的是,它在计算聚合值时存在一些众所周......
  • 完全参考java8的开发文档写的文件读写
    publicstaticvoidmain(String[]args)throwsIOException{Stringpath="D:\\project\\luotuo-server\\src\\test\\java\\com\\manageSystem\\project......
  • Java8 遍历List 使用stream().parallel()并发安全
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 基于Java8Date-Time API的日期工具类
    在旧版的Java中,日期时间API存在诸多问题,其中有:非线程安全−java.util.Date是非线程安全的,所有的日期类都是可变的,这是Java日期类最大的问题之一。设计很差−Java的......
  • lambda表达式
    接口类只有一个抽象方法,才可以使用lambda表达式packagecom.lambda;publicclasslambdaTest{publicstaticvoidmain(String[]args){//向上转型实现接......
  • JAVA8 函数式编程(1)- Lambda表达式
    aliases:[JAVALambda]tags:"#Java"summary:[如何使用函数式编程写出优雅高效的JAVA代码]author:[yaenli]date:[2022-11-10]1简介简洁的代码就能处......
  • Java8的Stream流如此强大,你知道它的原理吗
    ......
  • 函数式接口lambda
    函数式接口Lambda表达式函数式接口定义任何接口,如果只包含唯一一个抽象方法,那么它就是函数式接口publicinterfaceRunnable{publicabstractvoidrun();......