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));

   }

}

🧣最后的话

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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
4月前
|
存储 JavaScript 前端开发
js中map属性
js中map属性
52 1
|
1月前
|
存储
`map()`方法在什么场景下会比 `forEach()`方法更高效?
综上所述,当需要对数组元素进行复杂的转换并生成新数组、进行链式调用和函数式编程、处理元素之间存在明确映射关系的情况以及与其他数组方法结合使用时,`map()`方法比`forEach()`方法更高效,能够使代码更加简洁、清晰和易于维护。
57 32
WK
|
1月前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
79 36
|
1月前
|
存储 JavaScript 前端开发
如何选择使用`map()`方法和`forEach()`方法?
选择使用`map()`方法还是`forEach()`方法主要取决于操作的目的、是否需要返回值、代码的可读性和维护性等因素。在实际开发中,需要根据具体的业务需求和场景来灵活选择合适的方法,以实现更高效、更易读和更易维护的代码。
26 3
|
1月前
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
37 1
|
2月前
|
存储 JavaScript 前端开发
《进阶篇第8章:vuex》包括理解vuex、安装vuex、搭建vuex环境、四个map方法的使用、模块化+名命空间
《进阶篇第8章:vuex》包括理解vuex、安装vuex、搭建vuex环境、四个map方法的使用、模块化+名命空间
22 3
|
2月前
|
Java
vue2知识点:vuex中四个map方法的使用,包括:mapState、mapGetters、mapMutations、mapActions
vue2知识点:vuex中四个map方法的使用,包括:mapState、mapGetters、mapMutations、mapActions
140 1
|
3月前
|
存储 JavaScript 前端开发
`forEach()`方法和`map()`方法哪个执行效率更高?
`forEach()`方法和`map()`方法哪个执行效率更高?
|
2月前
|
存储 JavaScript 前端开发
js中map属性
js中map属性
23 0
|
3月前
|
JavaScript 前端开发
JavaScript Array map() 方法
JavaScript Array map() 方法
下一篇
DataWorks