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

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

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

import com.alibaba.fastjson.JSON;
import org.assertj.core.util.Lists;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author gzh -》javaNice
 * *
 */
public class StreamDemo {
   
   
    public static void main(String[] args) {
   
   
        User user1=new User("1","zhangsan",1);
        User user2=new User("2","zhangsan",2);
        User user3=new User("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
        Integer totalAge = userList.stream().map(User::getAge).reduce(0, Integer::sum);
        System.out.println("6总年龄->"+totalAge);

        //7.只对名称为zhangsan的age  进行统计汇总
        Integer totalAgeFilter = userList.stream().filter(t -> t.getName().equals("zhangsan")).map(User::getAge).reduce(0, Integer::sum);
        System.out.println("7总年龄filter->"+totalAgeFilter);

        //8.获取最大age
        Integer maxAge = 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));

        //11.key为多字段拼接,value为某个属性
        Map<String, Integer> map = userList.stream()
                .collect(Collectors.toMap(p -> p.getName() + p.getAge() + p.getId(), User::getAge));
        System.out.println("11->"+ JSON.toJSONString(map));

        //12.按多字段分组
        Map<String, List<User>> nameAgeMap = userList.stream()
                .collect(Collectors.groupingBy(l -> l.getName() +"-" + l.getAge()));
        System.out.println("12->"+ JSON.toJSONString(nameAgeMap));


    }
}

image-20231024161601339

目录
相关文章
|
4月前
|
数据处理
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
24 0
|
4月前
|
前端开发 Java 测试技术
把List<对象>转变<String,List<对象>>形式,k为判断的值,v为k重复的数据。
把List<对象>转变<String,List<对象>>形式,k为判断的值,v为k重复的数据。
22 0
|
9月前
List 集合通过创建stream 流的方式转成map集合
List 集合通过创建stream 流的方式转成map集合
54 0
|
5月前
|
Java
使用 stream 从 List 对象中获取某列数据
使用 stream 从 List 对象中获取某列数据
88 0
|
6月前
jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法
jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法
85 5
|
6月前
|
存储 算法 Java
集合工具类的常用方法--小总和
集合工具类的常用方法--小总和
30 0
|
9月前
|
fastjson
如何将Map 集合里面的数据转换成对象
如何将Map 集合里面的数据转换成对象
130 0
|
9月前
|
Java
java8 List根据对象中属性去重-多属性去重-去除重复字符串
java8 List根据对象中属性去重-多属性去重-去除重复字符串
660 0
|
10月前
|
数据库
List中对象去重和List 根据对象的属性去重
有这么一个需求,需要将从数据库查出来的数据进行去重。
53 0
|
11月前
如何对数组进行一个过滤操作map
如何对数组进行一个过滤操作map
68 0