jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法

简介: jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法

jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法

jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法🔊stream10种常用方法🧣最后的话

🔊stream10种常用方法

//1、list转map,指定key-value,key,value是对象中的某个属性值.

Map<String,String>userMap1=userList.stream().collect(Collectors.toMap(User::getId,User::getName));

System.out.println("1->"+userMap1);

//2、list转map 指定key-value,key为属性值,value是对象本身

Map<String,User>userMap2=userList.stream().collect(Collectors.toMap(User::getId,User->User));

System.out.println("2->"+userMap2);

//3、list转map 指定key-value,value是对象本身,Function.identity()是简洁写法,返回对象本身

Map<String,User>userMap3=userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));

System.out.println("3->"+userMap3);

//4、指定key-value,value是对象本身,Function.identity()是简洁写法,返回对象本身,遇到key 冲突的解决办法,选择第二个key的值value2覆盖第一个key的值value1。

Map<String,User>userMap4=userList.stream().collect(Collectors.toMap(User::getName, Function.identity(),(value1,value2)->value2));

System.out.println("4->"+userMap4);

//5、指定key-value,按照name进行分组 value是对象集合

Map<String, List<User>>userMap5=userList.stream().collect(Collectors.groupingBy(User::getName));

System.out.println("5->"+userMap5);

//6.统计所有age

IntegertotalAge=userList.stream().map(User::getAge).reduce(0, Integer::sum);

System.out.println("6总年龄->"+totalAge);

//7.只对名称为zhangsan的age  进行统计汇总

IntegertotalAgeFilter=userList.stream().filter(t->t.getName().equals("zhangsan")).map(User::getAge).reduce(0, Integer::sum);

System.out.println("7总年龄filter->"+totalAgeFilter);

//8.获取最大age

IntegermaxAge=userList.stream().map(User::getAge).max((x, y) ->x-y).get();

System.out.println("8最大年龄->"+maxAge);

//9.循环打印

userList.stream().forEach(user->System.out.println("9->"+user));

//10.获取名称集合

List<String>nameList=userList.stream().map(User::getName).collect(Collectors.toList());

System.out.println("10名称集合->"+JSON.toJSONString(nameList));

/**

* @author gzh -》javaNice

* 用户类

*/

publicclassUser {

   /**

    * id

    */

   privateStringid;

   /**

    * 名称

    */

   privateStringname;

   /**

    * 年龄

    */

   privateIntegerage;

   publicStringgetId() {

       returnid;

   }

   publicvoidsetId(Stringid) {

       this.id=id;

   }

   publicStringgetName() {

       returnname;

   }

   publicvoidsetName(Stringname) {

       this.name=name;

   }

   publicIntegergetAge() {

       returnage;

   }

   publicvoidsetAge(Integerage) {

       this.age=age;

   }

   @Override

   publicStringtoString() {

       return"User{"+

               "id='"+id+'\''+

               ", name='"+name+'\''+

               ", age="+age+

               '}';

   }

   publicUser() {

   }

   publicUser(Stringid, Stringname, Integerage) {

       this.id=id;

       this.name=name;

       this.age=age;

   }

}

importcom.alibaba.fastjson.JSON;

importorg.assertj.core.util.Lists;

importjava.util.List;

importjava.util.Map;

importjava.util.function.Function;

importjava.util.stream.Collectors;

/**

* @author gzh -》javaNice

* *

*/

publicclassStreamDemo {

   publicstaticvoidmain(String[] args) {

       Useruser1=newUser("1","zhangsan",1);

       Useruser2=newUser("2","zhangsan",2);

       Useruser3=newUser("3","lisi",2);

       List<User>userList=Lists.newArrayList();

       userList.add(user1);

       userList.add(user2);

       userList.add(user3);

       //1、list转map,指定key-value,key,value是对象中的某个属性值.

       Map<String,String>userMap1=userList.stream().collect(Collectors.toMap(User::getId,User::getName));

       System.out.println("1->"+userMap1);

       //2、list转map 指定key-value,key为属性值,value是对象本身

       Map<String,User>userMap2=userList.stream().collect(Collectors.toMap(User::getId,User->User));

       System.out.println("2->"+userMap2);

       //3、list转map 指定key-value,value是对象本身,Function.identity()是简洁写法,返回对象本身

       Map<String,User>userMap3=userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));

       System.out.println("3->"+userMap3);

       //4、指定key-value,value是对象本身,Function.identity()是简洁写法,返回对象本身,遇到key 冲突的解决办法,选择第二个key的值value2覆盖第一个key的值value1。

       Map<String,User>userMap4=userList.stream().collect(Collectors.toMap(User::getName, Function.identity(),(value1,value2)->value2));

       System.out.println("4->"+userMap4);

       //5、指定key-value,按照name进行分组 value是对象集合

       Map<String, List<User>>userMap5=userList.stream().collect(Collectors.groupingBy(User::getName));

       System.out.println("5->"+userMap5);

       //6.统计所有age

       IntegertotalAge=userList.stream().map(User::getAge).reduce(0, Integer::sum);

       System.out.println("6总年龄->"+totalAge);

       //7.只对名称为zhangsan的age  进行统计汇总

       IntegertotalAgeFilter=userList.stream().filter(t->t.getName().equals("zhangsan")).map(User::getAge).reduce(0, Integer::sum);

       System.out.println("7总年龄filter->"+totalAgeFilter);

       //8.获取最大age

       IntegermaxAge=userList.stream().map(User::getAge).max((x, y) ->x-y).get();

       System.out.println("8最大年龄->"+maxAge);

       //9.循环打印

       userList.stream().forEach(user->System.out.println("9->"+user));

       //10.获取名称集合

       List<String>nameList=userList.stream().map(User::getName).collect(Collectors.toList());

       System.out.println("10名称集合->"+JSON.toJSONString(nameList));

   }

}

🧣最后的话

🖲要熟练掌握技巧,一定多多练习:纸上得来终觉浅,绝知此事要躬行


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
17天前
|
Java
JavaSE——JDK8新特性(2/2):方法引用(静态方法的引用、实例方法的引用、特定类型的方法引用、构造器引用)
JavaSE——JDK8新特性(2/2):方法引用(静态方法的引用、实例方法的引用、特定类型的方法引用、构造器引用)
10 0
|
1月前
|
Java API
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
|
1月前
|
Java
Java jdk1.8 lambda 遍历集合的时候到底需不需判空
Java jdk1.8 lambda 遍历集合的时候到底需不需判空
|
1月前
|
Java API 数据处理
JDK 21中的序列集合:有序数据的新篇章
本文将深入探讨JDK 21中新增的序列集合(Sequenced Collections)的概念、特性以及其在现代软件开发中的应用。序列集合为有序数据的处理提供了更高效、更直观的方式,使得开发者能够更轻松地管理集合中元素的顺序。本文将通过示例代码展示序列集合的使用,并分析其与传统集合的区别与优势。
|
1月前
|
编解码 Java API
集合在JDK9中的新特性
集合在JDK9中的新特性
|
1月前
|
安全 Java 开发者
JDK 9:不可变集合类工厂方法的探索与实践
JDK 9引入了一系列新的不可变集合类工厂方法,这些方法为Java开发者提供了更加便捷和安全的方式来创建不可变集合。本文将深入探讨这些新方法的原理、优势以及如何在实际开发中应用它们。
|
1月前
|
Java API 数据处理
JDK 8:Stream API——数据处理的新篇章
JDK 8引入了Stream API,为Java中的数据处理提供了一种全新的方式。本文将详细介绍Stream API的原理、优势以及如何在实际开发中应用这一特性。
|
1月前
|
Java 开发者
JDK 9新特性探秘:接口中的私有方法
本文旨在探讨Java Development Kit 9(JDK 9)为Java接口引入的新特性——私有方法。在JDK 9之前,接口只能包含公共的抽象方法和常量。然而,随着Java的不断发展,接口中需要更加灵活的方式来处理复杂性和代码重用。因此,JDK 9引入了私有方法,允许开发者在接口内部定义私有方法和私有静态方法,从而提高了代码的模块性和可维护性。本文将详细介绍这一新特性的使用方法、应用场景及其对Java编程的影响。
|
1月前
|
存储 Java 关系型数据库
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(二)
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(二)
|
1月前
|
JavaScript 前端开发 Java
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(一)
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(一)