java對象list使用stream根據(jù)某一個屬性轉(zhuǎn)換成map的3種方式舉例
可以使用Java 8中的Stream API將List轉(zhuǎn)換為Map,并根據(jù)某個屬性作為鍵或值。以下是一些示例代碼:
將List轉(zhuǎn)換為Map,鍵為某個屬性,值為對象本身
List<Person> personList = ... // 假設(shè)這是一個Person對象列表
Map<String, Person> personMap = personList.stream()
.collect(Collectors.toMap(Person::getName, Function.identity()));
在這個示例中,將Person對象列表轉(zhuǎn)換為Map,其中鍵為Person對象的name屬性,值為Person對象本身。
將List轉(zhuǎn)換為Map,鍵為對象本身,值為某個屬性
List<Person> personList = ... // 假設(shè)這是一個Person對象列表
Map<Person, String> personMap = personList.stream()
.collect(Collectors.toMap(Function.identity(), Person::getAddress));
在這個示例中,將Person對象列表轉(zhuǎn)換為Map,其中鍵為Person對象本身,值為Person對象的address屬性。
將List轉(zhuǎn)換為Map,鍵為某個屬性,值為另一個屬性
List<Person> personList = ... // 假設(shè)這是一個Person對象列表
Map<String, String> personMap = personList.stream()
.collect(Collectors.toMap(Person::getName, Person::getAddress));
在這個示例中,將Person對象列表轉(zhuǎn)換為Map,其中鍵為Person對象的name屬性,值為Person對象的address屬性。
無論使用哪種方式,都可以使用Java 8的Stream API將List轉(zhuǎn)換為Map,并根據(jù)某個屬性作為鍵或值。需要注意的是,在將List轉(zhuǎn)換為Map時,鍵必須是唯一的,否則將會拋出異常。
附:list轉(zhuǎn)map特殊操作
不同實體的list之間轉(zhuǎn)化,相同屬性的賦值
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轉(zhuǎn)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);
}
}總結(jié)
到此這篇關(guān)于java對象list使用stream根據(jù)某一個屬性轉(zhuǎn)換成map的3種方式的文章就介紹到這了,更多相關(guān)java對象根據(jù)某屬性轉(zhuǎn)換map內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring實戰(zhàn)之使用靜態(tài)工廠方法創(chuàng)建Bean操作示例
這篇文章主要介紹了Spring實戰(zhàn)之使用靜態(tài)工廠方法創(chuàng)建Bean操作,結(jié)合實例形式分析了靜態(tài)工廠方法創(chuàng)建Bean的相關(guān)實現(xiàn)步驟與操作注意事項,需要的朋友可以參考下2019-11-11
IDEA如何設(shè)置SVN提交忽略文件 target.iml
使用IDEA的SVN插件時,可能會遇到提交不必要文件的問題,解決這個問題有兩種方法:第一種是在IDEA設(shè)置中的File Types下的Ignore files and folders添加需要忽略的文件或文件夾;第二種是使用SVN客戶端TortoiseSVN,在項目目錄點擊右鍵選擇properties2024-10-10
詳解如何在Spring?Security中自定義權(quán)限表達式
這篇文章主要和大家詳細介紹一下如何在Spring?Security中自定義權(quán)限表達式,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-07-07
深入解析Java編程中面向字節(jié)流的一些應(yīng)用
這篇文章主要介紹了Java編程中面向字節(jié)流的一些應(yīng)用,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-10-10
Spring ApplicationContext接口功能詳細介紹
ApplicationContext是Spring應(yīng)用程序中的中央接口,由于繼承了多個組件,使得ApplicationContext擁有了許多Spring的核心功能,如獲取bean組件,注冊監(jiān)聽事件,加載資源文件等2023-02-02
SpringBoot項目使用?axis?調(diào)用webservice接口的實踐記錄
這篇文章主要介紹了SpringBoot項目使用?axis?調(diào)用webservice接口,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
Springboot基礎(chǔ)學(xué)習(xí)之初識SpringBoot
今天帶大家學(xué)習(xí)Springboot基礎(chǔ)知識,文中有非常詳細的圖文解說及代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05

