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中将map转成json时,如何将map中的整型数字在转成json后,变成字符串,而不是整型。