Java中 Map转List 、 List转Map 简单好用 您所在的位置:网站首页 oracle中取最大值 Java中 Map转List 、 List转Map 简单好用

Java中 Map转List 、 List转Map 简单好用

2023-06-02 05:33| 来源: 网络整理| 查看: 265

1. Map转List 1.1 将Map的key转换为List public void testMapToList(){ // 创建一个Map Map map = new HashMap(); map.put("key1", 1); map.put("key2", 2); map.put("key3", 3); // 将Map的key转换为List List keyList = new ArrayList(map.keySet()); // 打印结果 System.out.println(keyList); }

输出:

[key1, key2, key3] 1.2 将Map的value转换为List public void testMapToList(){ // 创建一个Map Map map = new HashMap(); map.put("key1", 1); map.put("key2", 2); map.put("key3", 3); // 将Map的value转换为List List keyList = new ArrayList(map.values()); // 打印结果 System.out.println(keyList); }

输出:

[1, 2, 3]

所以说这两个方法的区别就是在new ArrayList时选择使用map.values()还是map.keySet()

2. List转Map 2.1 最普通的List转Map public void testListToMap(){ // 创建一个List List list = new ArrayList(); list.add("key1"); list.add("key2"); list.add("key3"); // 将List转换为Map Map map = list.stream() .collect(Collectors.toMap(key -> key, value -> 0, (v1, v2) -> v1)); // value里默认放一个0 // 打印结果 System.out.println(map); }

输出:

{key1=0, key2=0, key3=0}

要特别注意里面的(v1, v2) -> v1) 必须带上。如果你的key里重复的时候没这句话会异常: java.lang.IllegalStateException: Duplicate key 0

(v1, v2) -> v1 表示当出现重复的键时,选择保留原始的值 v1,而忽略新值 v2。 如果你希望在出现重复的键时采取其他操作,例如取最大值、取最小值或者进行求和等操作,您可以在合并函数中编写相应的逻辑。例如,可以使用(v1, v2) -> Math.max(v1, v2)来选择两个值中的最大值。

2.2 List转Map同时保证顺序

假如我的list的放入顺序变了:

List list = new ArrayList(); list.add("key3"); list.add("key2"); list.add("key1");

用第一个方式得到的Map是乱序的,如果想保证顺序,可以借助LinkedHashMap.

public void testListToMap(){ // 创建一个List List list = new ArrayList(); list.add("key3"); list.add("key2"); list.add("key1"); // 将List转换为Map Map map = list.stream() .collect(Collectors.toMap(key -> key, value -> 0, (v1, v2) -> v1, LinkedHashMap::new)); // value里默认放一个0 // 打印结果 System.out.println(map); }

输出:

{key3=0, key2=0, key1=0} 2.3 List转Map(对象类型且key拼接)

假如有这个User:

@Data @AllArgsConstructor @NoArgsConstructor @Builder public static class User{ private Integer id; private String name; private Integer age; }

想要id拼接_拼接name作为key,age作为value,转Map。代码:

public void testListToMap2() { // 创建一个List List list = new ArrayList(); list.add(new User(1,"Tom",10)); list.add(new User(2,"Tim",10)); list.add(new User(3,"Jim",10)); // 将List转换为Map Map map = list.stream() .collect(Collectors.toMap(key -> key.getId()+"_"+key.getName(), value -> value.getAge(), (v1, v2) -> v1)); System.out.println(JSON.toJSON(map)); }

输出:

{"3_Jim":10,"2_Tim":10,"1_Tom":10} 2.4 List转Map(id作为key,每个元素作为value) public void testListToMap2() { // 创建一个List List list = new ArrayList(); list.add(new User(1,"Tom",10)); list.add(new User(2,"Tim",10)); list.add(new User(3,"Jim",10)); // 将List转换为Map Map map = list.stream() .collect(Collectors.toMap(User::getId, value -> value, (v1, v2) -> v1)); System.out.println(JSON.toJSON(map)); }

输出:

{ "1": { "name": "Tom", "id": 1, "age": 10 }, "2": { "name": "Tim", "id": 2, "age": 10 }, "3": { "name": "Jim", "id": 3, "age": 10 } }

完结撒花~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有