Java如何将List转成Map,及其细节(Java中用Stream)

Posted 石头StoneWang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java如何将List转成Map,及其细节(Java中用Stream)相关的知识,希望对你有一定的参考价值。

Java如何将List转成Map,及其细节(Java中用Stream)

详细看代码

package com.example.demo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 通过 Stream 的 API 将 List 转 Map
 */
public class TestListToMapWithStreamApi 
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class MyEnt 
        private String key;
        private String value;
    

    public static void main(String[] args) 
        MyEnt m1 = new MyEnt("my_key1", "Stone");
        MyEnt m2 = new MyEnt("my_key2", "Cassie");
        MyEnt m3 = new MyEnt("my_key1", "Stone2");

        // 构造 List
        List<MyEnt> list = new ArrayList<>();
        list.add(m1);
        list.add(m2);
        list.add(m3);

        // 【将List转Map】
        // 【1】强烈建议使用三参数的接口,否则在key出现重复后会出现运行时异常
        // Map<String, MyEnt> map0 = list.stream().collect(Collectors.toMap(x -> x.getKey(), x -> x));
        // System.out.println(map0);// Duplicate key TestListToMapWithStreamApi.MyEnt(key=my_key1, value=Stone)

        // 【2】三参接口:第一个指明什么作为key,第二个指明什么作为value,第三个是在key出现重复后如何处理
        Map<String, MyEnt> map1 = list.stream().collect(Collectors.toMap(x -> x.getKey(), x -> x, (k1, k2) -> k1));
        System.out.println(map1);

        // 【3】关于第三个参数的细节:含义是k1和k2假设key冲突保留谁的意思,上面那个方法保留k1,下面这个保留k2,两者打印的结果是不一样的,观察value值即可知道结论。
        Map<String, MyEnt> map2 = list.stream().collect(Collectors.toMap(x -> x.getKey(), x -> x, (k1,k2) -> k2));
        System.out.println(map2);
    



以上是关于Java如何将List转成Map,及其细节(Java中用Stream)的主要内容,如果未能解决你的问题,请参考以下文章

java中怎么list 转成 map

java中怎么list 转成 map?

java中将map转成json时,如何将map中的整型数字在转成json后,变成字符串,而不是整型。

java如何将json的数据转换为map或者list类型的?

如何将java中的map转换成jsonobject

java中如何用json接收一个list?