java对象list使用stream根据某一个属性转换成map的3种方式举例

 更新时间:2024年01月23日 10:25:52   作者:jilcccccc  
开发小伙伴们通常会需要使用到对象和Map互相转换的开发场景,下面这篇文章主要给大家介绍了关于java对象list使用stream根据某一个属性转换成map的3种方式,需要的朋友可以参考下

可以使用Java 8中的Stream API将List转换为Map,并根据某个属性作为键或值。以下是一些示例代码:

将List转换为Map,键为某个属性,值为对象本身

List<Person> personList = ... // 假设这是一个Person对象列表
Map<String, Person> personMap = personList.stream()
        .collect(Collectors.toMap(Person::getName, Function.identity()));

在这个示例中,将Person对象列表转换为Map,其中键为Person对象的name属性,值为Person对象本身。

将List转换为Map,键为对象本身,值为某个属性

List<Person> personList = ... // 假设这是一个Person对象列表
Map<Person, String> personMap = personList.stream()
        .collect(Collectors.toMap(Function.identity(), Person::getAddress));

在这个示例中,将Person对象列表转换为Map,其中键为Person对象本身,值为Person对象的address属性。

将List转换为Map,键为某个属性,值为另一个属性

List<Person> personList = ... // 假设这是一个Person对象列表
Map<String, String> personMap = personList.stream()
        .collect(Collectors.toMap(Person::getName, Person::getAddress));

在这个示例中,将Person对象列表转换为Map,其中键为Person对象的name属性,值为Person对象的address属性。

无论使用哪种方式,都可以使用Java 8的Stream API将List转换为Map,并根据某个属性作为键或值。需要注意的是,在将List转换为Map时,键必须是唯一的,否则将会抛出异常。

附:list转map特殊操作

不同实体的list之间转化,相同属性的赋值

    List<ResourcesInfoCapacityExcel> resourceInfoExcels = resourcesInfoCapacities.stream().map(
                todo -> new ResourcesInfoCapacityExcel(todo.getModelName(), todo.getExistingCapacity(), todo.getForecastWorkload(), todo.getDifferenceWorkload(), todo.getMonth()
                )).collect(Collectors.toList());

非stram

相同key将值相加,不同key put进map

  Map<String, Double> foreWorkLoad = new HashMap<>();
foreWorkLoad.merge(key, resourcesWorkloadCalculate1.getWorkLoad(), (a, b) -> a + b);

list转map,相同key的list相加

 Map<String, List<ResourcesInfo>> resourcesInfosListMap =new HashMap<>();
        for (ResourcesInfo resourcesInfo:
        resourcesInfos) {
            String key=resourcesInfo.getModel() + "," + workDateMap.get(resourcesInfo.getMonth());

            List<ResourcesInfo>  moduleRanks = resourcesInfos.stream()
                    .filter(e -> resourcesInfo.getModel() == null || resourcesInfo.getModel().equals(e.getModel())
                    ).filter(e -> resourcesInfo.getMonth() == null || resourcesInfo.getMonth().equals(e.getMonth())
            ).collect(Collectors.toList());
            if (resourcesInfosListMap.get(key)==null){
                resourcesInfosListMap.put(key,moduleRanks);
            }else {
                moduleRanks.addAll(resourcesInfosListMap.get(key));
                resourcesInfosListMap.put(key,moduleRanks);
            }
        }

总结

到此这篇关于java对象list使用stream根据某一个属性转换成map的3种方式的文章就介绍到这了,更多相关java对象根据某属性转换map内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Socket编程实现简单的问候服务

    Java Socket编程实现简单的问候服务

    这篇文章主要为大家介绍了Java Socket编程实现简单的问候服务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • 详解Java中数组判断元素存在几种方式比较

    详解Java中数组判断元素存在几种方式比较

    这篇文章主要介绍了Java中数组判断元素存在几种方式比较,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-07-07
  • resubmit渐进式防重复提交框架示例

    resubmit渐进式防重复提交框架示例

    这篇文章主要为大家介绍了resubmit渐进式防重复提交框架示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java中的CompletableFuture原理与用法

    Java中的CompletableFuture原理与用法

    CompletableFuture 是由Java8引入的,这让我们编写清晰可读的异步代码变得更加容易,该类功能比Future 更加强大,在Java中CompletableFuture用于异步编程,异步通常意味着非阻塞,运行任务单独的线程,与主线程隔离,这篇文章介绍CompletableFuture原理与用法,一起看看吧
    2024-01-01
  • SpringCloud与Consul集成实现负载均衡功能

    SpringCloud与Consul集成实现负载均衡功能

    负载均衡基本概念有:实服务、实服务组、虚服务、调度算法、持续性等,其常用应用场景主要是服务器负载均衡,链路负载均衡。这篇文章主要介绍了SpringCloud与Consul集成实现负载均衡 ,需要的朋友可以参考下
    2018-09-09
  • Java多线程通讯之wait,notify的区别详解

    Java多线程通讯之wait,notify的区别详解

    这篇文章主要介绍了Java多线程通讯之wait,notify的区别详解,非常不错,具有一定的参考借鉴借鉴价值,需要的朋友可以参考下
    2018-07-07
  • 基于Spring定时任务的fixedRate和fixedDelay的区别

    基于Spring定时任务的fixedRate和fixedDelay的区别

    这篇文章主要介绍了基于Spring定时任务的fixedRate和fixedDelay的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java文件复制多种方法实例代码

    Java文件复制多种方法实例代码

    近期用到文件复制,虽然程序很简单,因为时间久了淡忘了,所以写一篇文章记录一下,下面这篇文章主要给大家介绍了关于Java文件复制多种方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • SpringBoot整合MQTT并实现异步线程调用的问题

    SpringBoot整合MQTT并实现异步线程调用的问题

    这篇文章主要介绍了基于SpringBoot通过注解实现对mqtt消息处理的异步调用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • IDEA创建web项目出现404错误解决方法

    IDEA创建web项目出现404错误解决方法

    今天先来搭建一个web工程,工程搭建好运行时发现404,本文主要介绍了IDEA创建web项目出现404错误解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09

最新评论