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)文章
springsecurity6配置自定義路徑身份認證的實現(xiàn)
本文主要介紹了springsecurity6配置自定義路徑身份認證的實現(xiàn),通過使用自定義的AuthorizationManager和MyService,可以實現(xiàn)更靈活的訪問控制,感興趣的可以了解一下2025-03-03Java線程狀態(tài)及切換、關(guān)閉線程的正確姿勢分享
這篇文章主要給大家介紹了關(guān)于Java線程狀態(tài)及切換、關(guān)閉線程的正確姿勢,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10SpringCLoud搭建Zuul網(wǎng)關(guān)集群過程解析
這篇文章主要介紹了SpringCLoud搭建Zuul網(wǎng)關(guān)集群過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03java.math包下計算浮點數(shù)和整數(shù)的類的實例
這篇文章主要介紹了java.math包下計算浮點數(shù)和整數(shù)的類的實例代碼,本文通過使用BigDecimal進行浮點數(shù)比較給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02Java?ASM使用logback日志級別動態(tài)切換方案展示
這篇文章主要介紹了Java?ASM使用logback日志級別動態(tài)切換方案展示,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04