Java 將List中的實體類按照某個字段進行分組并存放至Map中操作
1、JDK1.8之前:
假設(shè)有實體類User,里面有字段id,我們將相同id的User進行分組,并存放在Map中。(例子不是很恰當(dāng),但很能說明問題)
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User(1, 1));
list.add(new User(1, 2));
list.add(new User(2, 1));
list.add(new User(2, 3));
list.add(new User(2, 2));
list.add(new User(3, 1));
Map<Integer, List<User>> map = new HashMap<>();
for(User user : list){
if(map.containsKey(user.getId())){//map中存在此id,將數(shù)據(jù)存放當(dāng)前key的map中
map.get(user.getId()).add(user);
}else{//map中不存在,新建key,用來存放數(shù)據(jù)
List<User> tmpList = new ArrayList<>();
tmpList.add(user);
map.put(user.getId(), tmpList);
}
}
System.out.println(map.toString());
}
執(zhí)行結(jié)果:

可以看到達到了了我們的目的
2、JDK1.8 新特性實現(xiàn)
Map<Integer, List<User>> map = list.stream().collect(Collectors.groupingBy(User::getId));
附上
List<Map<String, Object>>>分組
List<Map<String, Object>>> list = new ArrayList<>();
Map<Long, List<Map<String, Object>>> contractIdMap =
list.stream().collect(Collectors.groupingBy(m -> (Long.parseLong(m.get("contractId").toString()))));
Map<Long, List<Map<String, Object>>> nameMap =
list.stream().collect(Collectors.groupingBy(m -> (m.get("name").toString())));
補充知識:java中對list的數(shù)據(jù)按照某個屬性進行分組,拆分成多個list
我就廢話不多說了,大家還是直接看代碼吧~
/**
* 按照List<Map<String,Object>>里面map的某個value重新封裝成多個不同的list, 原始數(shù)據(jù)類型List<Map
* <String,Object>>, 轉(zhuǎn)換后數(shù)據(jù)類型Map<String,List<Map<String,Object>>>
*
* @param list
* @param oneMapKey
* @return
*/
private static Map<String, Object> change(List<Map<String, Object>> list, String oneMapKey) {
Map<String, Object> resultMap = new HashMap<String, Object>();
Set setTmp = new HashSet();
for (Map<String, Object> tmp : list) {
setTmp.add(tmp.get(oneMapKey));
}
Iterator it = setTmp.iterator();
while (it.hasNext()) {
String oneSetTmpStr = (String) it.next();
List<Map<String, Object>> oneSetTmpList = new ArrayList<Map<String, Object>>();
for (Map<String, Object> tmp : list) {
String oneMapValueStr = (String) tmp.get(oneMapKey);
if (oneMapValueStr.equals(oneSetTmpStr)) {
oneSetTmpList.add(tmp);
}
}
resultMap.put(oneSetTmpStr, oneSetTmpList);
}
return resultMap;
}
以上這篇Java 將List中的實體類按照某個字段進行分組并存放至Map中操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
JAVA發(fā)送HTTP請求的多種方式詳細總結(jié)
目前做項目中有一個需求是這樣的,需要通過Java發(fā)送url請求,查看該url是否有效,這時我們可以通過獲取狀態(tài)碼來判斷,下面這篇文章主要給大家介紹了關(guān)于JAVA發(fā)送HTTP請求的多種方式總結(jié)的相關(guān)資料,需要的朋友可以參考下2023-01-01
SpringMVC結(jié)合模板模式實現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù)
我們經(jīng)常會遇到需要傳遞對象的場景,有時候,我們需要將一個對象的數(shù)據(jù)傳遞給另一個對象進行處理,但是又不希望直接暴露對象的內(nèi)部結(jié)構(gòu)和實現(xiàn)細節(jié),所以本文給大家介紹了SpringMVC結(jié)合模板模式實現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù),需要的朋友可以參考下2024-03-03
mybatisplus下劃線駝峰轉(zhuǎn)換的問題解決
在mybatis-plus中,下劃線-駝峰自動轉(zhuǎn)換可能導(dǎo)致帶下劃線的字段查詢結(jié)果為null,本文就來介紹一下mybatisplus下劃線駝峰轉(zhuǎn)換的問題解決,感興趣的可以了解一下2024-10-10
java 數(shù)據(jù)庫連接與增刪改查操作實例詳解
這篇文章主要介紹了java 數(shù)據(jù)庫連接與增刪改查操作,結(jié)合實例形式詳細分析了java使用jdbc進行數(shù)據(jù)庫連接及增刪改查等相關(guān)操作實現(xiàn)技巧與注意事項,需要的朋友可以參考下2019-11-11

