文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-08-30 20:05

关注

1.1 将Map的key转换为List

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

输出:

[key1, key2, key3]

1.2 将Map的value转换为List

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

输出:

[1, 2, 3]

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


2.1 最普通的List转Map

    public void testListToMap(){        // 创建一个List        List<String> list = new ArrayList<>();        list.add("key1");        list.add("key2");        list.add("key3");        // 将List转换为Map        Map<String, Integer> 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<String> list = new ArrayList<>();    list.add("key3");    list.add("key2");    list.add("key1");

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

public void testListToMap(){        // 创建一个List        List<String> list = new ArrayList<>();        list.add("key3");        list.add("key2");        list.add("key1");        // 将List转换为Map        Map<String, Integer> 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作为keyage作为value,转Map。代码:

public void testListToMap2() {        // 创建一个List        List<User> 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<String, Integer> 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<User> 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<Integer, User> 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}}

完结撒花~

来源地址:https://blog.csdn.net/jiuweihu521/article/details/130867637

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯