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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
基于Spring定时任务的fixedRate和fixedDelay的区别
这篇文章主要介绍了基于Spring定时任务的fixedRate和fixedDelay的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-10-10
最新评论