服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java中 Map转List 、 List转Map 简单实现方法

Java中 Map转List 、 List转Map 简单实现方法

2023-10-11 15:12九尾狐的yi巴 Java教程

本文主要为大家介绍下在Java中 Map转List 、 List转Map 简单实现方法,有需要的朋友可以参考下

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
	}
}

完结撒花~

到此这篇关于Java中 Map转List 、 List转Map 简单实现方法的文章就介绍到这了,更多相关内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/jiuweihu521/article/details/130867637

延伸 · 阅读

精彩推荐
  • Java教程Springboot工具类FileCopyUtils使用教程

    Springboot工具类FileCopyUtils使用教程

    这篇文章主要介绍了Springboot内置的工具类之FileCopyUtils的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    凡夫贩夫5132023-06-05
  • Java教程Java实现颜色渐变效果

    Java实现颜色渐变效果

    这篇文章主要为大家详细介绍了Java实现颜色渐变效果的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    落枫飘飘6832021-06-19
  • Java教程spring boot 自定义参数过滤器,把传入的空字符转换成null方式

    spring boot 自定义参数过滤器,把传入的空字符转换成null方式

    这篇文章主要介绍了spring boot 自定义参数过滤器,把传入的空字符转换成null方式。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地...

    Orgin57822021-12-08
  • Java教程SpringBoot整合Scala构建Web服务的方法

    SpringBoot整合Scala构建Web服务的方法

    这篇文章主要介绍了SpringBoot整合Scala构建Web服务的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    qianmoQ8302021-07-18
  • Java教程SpringBoot整合minio快速入门教程(代码示例)

    SpringBoot整合minio快速入门教程(代码示例)

    这篇文章主要介绍了SpringBoot整合minio快速入门实现文件上传和下载的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友...

    黄恒愉8752022-11-03
  • Java教程springboot连接Redis的教程详解

    springboot连接Redis的教程详解

    这篇文章主要介绍了springboot连接Redis的教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    触初4702021-08-19
  • Java教程java 动态生成bean的案例

    java 动态生成bean的案例

    这篇文章主要介绍了java 动态生成bean的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    专注网赚的程序员11282021-08-09
  • Java教程Java String类字符串的理解与认知

    Java String类字符串的理解与认知

    String字符串和char字符不同,char使用单引号,只能表示一个字符,字符串就是一段文本。String是个类。这个类使用final修饰,所以这个类是不可以继承扩充和...

    执久呀10782022-02-21