如何按Account键值拆分String类型Map列表并转为嵌套列表?
按Account分组List<Map<String,String>>的简便实现方法
最简便的实现方式是利用Java 8及以上版本的Stream API配合Collectors.groupingBy,几行代码就能完成分组:
List<List<Map<String, String>>> groupedList = new ArrayList<>( dataListMap.stream() .collect(Collectors.groupingBy(map -> map.get("Account"))) .values() );
代码说明
stream():将原始列表转为流,支持链式操作Collectors.groupingBy(map -> map.get("Account")):以每个Map中"Account"对应的字符串作为分组键,自动将相同Account的Map归集到同一组,返回一个Map<String, List<Map<String, String>>>(键是Account值,值是对应分组的Map列表)values():取出分组后的所有子列表集合,转成ArrayList就得到你需要的List<List<Map<String,String>>>结构
保持分组顺序(可选)
如果需要保留Account首次出现的顺序(比如先220组,再230组),可以指定用LinkedHashMap维护插入顺序:
List<List<Map<String, String>>> groupedList = new ArrayList<>( dataListMap.stream() .collect(Collectors.groupingBy( map -> map.get("Account"), LinkedHashMap::new, Collectors.toList() )) .values() );
低版本Java的替代方案(Java 8之前)
如果无法使用Stream API,也可以手动遍历分组:
Map<String, List<Map<String, String>>> groupMap = new HashMap<>(); for (Map<String, String> map : dataListMap) { String account = map.get("Account"); groupMap.computeIfAbsent(account, k -> new ArrayList<>()).add(map); } List<List<Map<String, String>>> groupedList = new ArrayList<>(groupMap.values());
内容的提问来源于stack exchange,提问作者nithinc
相关产品推荐
相关产品推荐

