开发手册 欢迎您!
软件开发者资料库

Java 将List<Object> 转换成 Map<String, Map<String,List<Object>>>的几种方法

示例Person类class Person { String personId; LocalDate date; String type; // getters &amp; setters }1、使用stream()进行转换list.stream() .c

示例Person类

class Person { String personId; LocalDate date; String type; // getters & setters}

1、使用stream()进行转换

list.stream()
.collect(Collectors.groupingBy(
Person::getPersonId,
Collectors.groupingBy(
Person::getDate
)));

2、使用foreach实现转换

Map>> outerMap = new HashMap<>();list.forEach(p -> outerMap        .computeIfAbsent(p.getPersonId(), k -> new HashMap<>()) // returns innerMap        .computeIfAbsent(p.getDate(), k -> new ArrayList<>())   // returns innerList    .add(p)); // adds Person to innerList

3、使用for循环转换

Map>> outerMap = new HashMap<>();
for(Person p : list) {
Map> innerMap = outerMap.get(p.getPersonId());
if (innerMap == null) {
innerMap = new HashMap<>();
outerMap.put(p.getPersonId(), innerMap);
}
List innerList = innerMap.get(p.getDate());
if (innerList == null) {
innerList = new ArrayList<>();
innerMap.put(p.getDate(), innerList);
}
innerList.add(p);
}