Java中List使用stream流转成map的几种方式详解

 更新时间:2023年04月19日 09:20:38   作者:小小小米fly  
Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作,下面这篇文章主要给大家介绍了关于Java中List使用stream流转成map的几种方式,需要的朋友可以参考下

实体例子

public class Person {
    private String name;
    private String address;
    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}

List 转成Map<String,Object>

	List<Person> list = new ArrayList<>();
	Person person1 = new Person("熊大","森林第一个小屋");
	Person person2 = new Person("熊二","森林第二个小屋");
	Person person3 = new Person("光头强","森林第三个小屋");
	Person person4 = new Person("熊大","森林第四个小屋");
	list.add(person1);
	list.add(person2);
	list.add(person3);
	list.add(person4);
	Map<String,Person> map =  list.stream().collect(Collectors.toMap(Person::getName,each->each,(value1, value2) -> value1));
	System.out.println(JSON.toJSONString(map));

控制台打印日志:

{“光头强”:{“address”:“森林第三个小屋”,“name”:“光头强”},“熊大”:{“address”:“森林第一个小屋”,“name”:“熊大”},“熊二”:{“address”:“森林第二个小屋”,“name”:“熊二”}}

List 转成Map<String,String>

	List<Person> list = new ArrayList<>();
	Person person1 = new Person("熊大","森林第一个小屋");
	Person person2 = new Person("熊二","森林第二个小屋");
	Person person3 = new Person("光头强","森林第三个小屋");
	Person person4 = new Person("熊大","森林第四个小屋");
	list.add(person1);
	list.add(person2);
	list.add(person3);
	list.add(person4);
	Map<String,String> map =  list.stream().collect(Collectors.toMap(Person::getName,Person::getAddress,(value1, value2) -> value1));
	System.out.println(JSON.toJSONString(map));

控制台打印日志:

{“光头强”:“森林第三个小屋”,“熊大”:“森林第一个小屋”,“熊二”:“森林第二个小屋”}

List 转成Map<String,List>

方法一:

	List<Person> list = new ArrayList<>();
	Person person1 = new Person("熊大","森林第一个小屋");
	Person person2 = new Person("熊二","森林第二个小屋");
	Person person3 = new Person("光头强","森林第三个小屋");
	Person person4 = new Person("熊大","森林第四个小屋");
	list.add(person1);
	list.add(person2);
	list.add(person3);
	list.add(person4);
	Map<String, List<Person>> map = list.stream().collect(Collectors.groupingBy(Person::getName));
	System.out.println(JSON.toJSONString(map));

控制台打印日志:

{“光头强”:[{“address”:“森林第三个小屋”,“name”:“光头强”}],“熊大”:[{“address”:“森林第一个小屋”,“name”:“熊大”},{“address”:“森林第四个小屋”,“name”:“熊大”}],“熊二”:[{“address”:“森林第二个小屋”,“name”:“熊二”}]}

方法二:

	List<Person> list = new ArrayList<>();
	Person person1 = new Person("熊大","森林第一个小屋");
	Person person2 = new Person("熊二","森林第二个小屋");
	Person person3 = new Person("光头强","森林第三个小屋");
	Person person4 = new Person("熊大","森林第四个小屋");
	list.add(person1);
	list.add(person2);
	list.add(person3);
	list.add(person4);
	Map<String,List<Person>> map =  list.stream().collect(Collectors.toMap(Person::getName,each->Collections.singletonList(each),(value1, value2) -> {
            List<Person> union = new ArrayList<>(value1);
            union.addAll(value2);
            return union;
        }));
	System.out.println(JSON.toJSONString(map));

控制台打印日志:

{“光头强”:[{“address”:“森林第三个小屋”,“name”:“光头强”}],“熊大”:[{“address”:“森林第一个小屋”,“name”:“熊大”},{“address”:“森林第四个小屋”,“name”:“熊大”}],“熊二”:[{“address”:“森林第二个小屋”,“name”:“熊二”}]}

List 转成Map<String,List>

	List<Person> list = new ArrayList<>();
	Person person1 = new Person("熊大","森林第一个小屋");
	Person person2 = new Person("熊二","森林第二个小屋");
	Person person3 = new Person("光头强","森林第三个小屋");
	Person person4 = new Person("熊大","森林第四个小屋");
	list.add(person1);
	list.add(person2);
	list.add(person3);
	list.add(person4);
	Map<String,List<String>> map = list.stream().collect(Collectors.toMap(Person::getName,each->Collections.singletonList(each.getAddress()),(value1, value2) -> {
            List<String> union = new ArrayList<>(value1);
            union.addAll(value2);
            return union;
        }));
	System.out.println(JSON.toJSONString(map));

控制台打印日志:

{“光头强”:[“森林第三个小屋”],“熊大”:[“森林第一个小屋”,“森林第四个小屋”],“熊二”:[“森林第二个小屋”]}

List<Map<String,Object>> 转成Map<String,Map<String,Object>>

		List<Map<String,Object>> list = new ArrayList<>();
        Person person1 = new Person("熊大","森林第一个小屋");
        Person person2 = new Person("熊二","森林第二个小屋");
        Person person3 = new Person("光头强","森林第三个小屋");
        Map<String,Object> map1 = new HashMap<>();
        map1.put("id","1");
        map1.put("person",person1);
        Map<String,Object> map2 = new HashMap<>();
        map2.put("id","2");
        map2.put("person",person2);
        Map<String,Object> map3 = new HashMap<>();
        map3.put("id","3");
        map3.put("person",person3);
        list.add(map1);
        list.add(map2);
        list.add(map3);
        Map<String,Map<String,Object>> map = list.stream().collect(Collectors.toMap(each->Objects.toString(each.get("id"),""),each->each,(key1,key2)->key1));
        System.out.println(JSON.toJSONString(map));

控制台打印日志:

{“1”:{“person”:{“address”:“森林第一个小屋”,“name”:“熊大”},“id”:“1”},“2”:{“person”:{“address”:“森林第二个小屋”,“name”:“熊二”},“id”:“2”},“3”:{“person”:{“address”:“森林第三个小屋”,“name”:“光头强”},“id”:“3”}}

List<Map<String,Object>> 转成Map<String,Object>

		List<Map<String,Object>> list = new ArrayList<>();
        Person person1 = new Person("熊大","森林第一个小屋");
        Person person2 = new Person("熊二","森林第二个小屋");
        Person person3 = new Person("光头强","森林第三个小屋");
        Map<String,Object> map1 = new HashMap<>();
        map1.put("id","1");
        map1.put("person",person1);
        Map<String,Object> map2 = new HashMap<>();
        map2.put("id","2");
        map2.put("person",person2);
        Map<String,Object> map3 = new HashMap<>();
        map3.put("id","3");
        map3.put("person",person3);
        list.add(map1);
        list.add(map2);
        list.add(map3);
        Map<String,Object> map = list.stream().collect(Collectors.toMap(each->Objects.toString(each.get("id"),""),each->each.get("person"),(key1,key2)->key1));
        System.out.println(JSON.toJSONString(map));

控制台打印日志:

{“1”:{“address”:“森林第一个小屋”,“name”:“熊大”},“2”:{“address”:“森林第二个小屋”,“name”:“熊二”},“3”:{“address”:“森林第三个小屋”,“name”:“光头强”}}

List<Map<String,String>> 转成Map<String,Map<String,String>>

		List<Map<String,String>> list = new ArrayList<>();
        Map<String,String> map1 = new HashMap<>();
        map1.put("id","1");
        map1.put("name","熊大");
        map1.put("address","森林第一个小屋");
        Map<String,String> map2 = new HashMap<>();
        map2.put("id","2");
        map2.put("name","熊二");
        map2.put("address","森林第二个小屋");
        Map<String,String> map3 = new HashMap<>();
        map3.put("id","3");
        map3.put("name","光头强");
        map3.put("address","森林第三个小屋");
        list.add(map1);
        list.add(map2);
        list.add(map3);
        Map<String,Map<String,String>> map = list.stream().collect(Collectors.toMap(each->each.get("id"),each->each,(key1,key2)->key1));
        System.out.println(JSON.toJSONString(map));

控制台打印日志:

{“1”:{“address”:“森林第一个小屋”,“name”:“熊大”,“id”:“1”},“2”:{“address”:“森林第二个小屋”,“name”:“熊二”,“id”:“2”},“3”:{“address”:“森林第三个小屋”,“name”:“光头强”,“id”:“3”}}

List<Map<String,String>> 转成Map<String,String>

		List<Map<String,String>> list = new ArrayList<>();
        Map<String,String> map1 = new HashMap<>();
        map1.put("id","1");
        map1.put("name","熊大");
        map1.put("address","森林第一个小屋");
        Map<String,String> map2 = new HashMap<>();
        map2.put("id","2");
        map2.put("name","熊二");
        map2.put("address","森林第二个小屋");
        Map<String,String> map3 = new HashMap<>();
        map3.put("id","3");
        map3.put("name","光头强");
        map3.put("address","森林第三个小屋");
        list.add(map1);
        list.add(map2);
        list.add(map3);
        Map<String,String> map = list.stream().collect(Collectors.toMap(each->each.get("id"),each->each.get("name"),(key1,key2)->key1));
        System.out.println(JSON.toJSONString(map));

控制台打印日志:

{“1”:“熊大”,“2”:“熊二”,“3”:“光头强”}

总结

到此这篇关于Java中List使用stream流转成map的几种方式的文章就介绍到这了,更多相关Java List用stream流转map内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 聊聊@Autowired注解注入,写接口名字还是实现类的名字

    聊聊@Autowired注解注入,写接口名字还是实现类的名字

    这篇文章主要介绍了聊聊@Autowired注解注入,写接口名字还是实现类的名字,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java中多线程同步类 CountDownLatch

    Java中多线程同步类 CountDownLatch

    本篇文章主要介绍了Java中多线程同步类 CountDownLatch的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05
  • Java 高并发十: JDK8对并发的新支持详解

    Java 高并发十: JDK8对并发的新支持详解

    本文主要介绍Java 高并发JDK8的支持,这里整理了详细的资料及1. LongAdder 2. CompletableFuture 3. StampedLock的介绍,有兴趣的小伙伴可以参考下
    2016-09-09
  • Java线程中的ThreadLocal详细分析

    Java线程中的ThreadLocal详细分析

    这篇文章主要介绍了Java线程中的ThreadLocal详细分析,ThreadLocal 提供线程的局部变量,每个线程都可以通过 get()和 set()对局部变量进行操作而不会对其他线程的局部变量产生影响,实现了线程之间的数据隔离,需要的朋友可以参考下
    2023-09-09
  • 为什么SpringMVC中请求的body不支持多次读取

    为什么SpringMVC中请求的body不支持多次读取

    这篇文章主要介绍了为什么SpringMVC中请求的body不支持多次读取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Springboot+MybatisPlus+Oracle实现主键自增的示例代码

    Springboot+MybatisPlus+Oracle实现主键自增的示例代码

    这篇文章主要介绍了Springboot+MybatisPlus+Oracle实现主键自增的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法

    解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法

    这篇文章主要介绍了解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • SSH框架网上商城项目第28战之使用Ajax技术局部更新商品数量和总价

    SSH框架网上商城项目第28战之使用Ajax技术局部更新商品数量和总价

    这篇文章主要为大家详细介绍了SSH框架网上商城项目第28战之使用Ajax技术局部更新商品数量和总价,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • SpringBoot+MyBatis-Plus实现分页功能

    SpringBoot+MyBatis-Plus实现分页功能

    在SpringBoot项目中,结合MyBatis-Plus(简称MP)可以非常方便地实现分页功能,MP为开发者提供了分页插件PaginationInterceptor,只需简单配置即可使用,本文给大家介绍了SpringBoot+MyBatis-Plus实现分页功能,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 使用Java代码获取服务器性能信息及局域网内主机名

    使用Java代码获取服务器性能信息及局域网内主机名

    这篇文章主要介绍了使用Java代码获取服务器性能信息及局域网内主机名的方法,方便对服务器的远程管理和团队协作时用到,而且文中的方法无需调用jni,需要的朋友可以参考下
    2015-11-11

最新评论