Ram*_*Ram 12 java collections list hashmap java-8
我有List<Person>哪里Person如下是.
class Person {
String personId;
LocalDate date;
String type;
// getters & setters
}
Run Code Online (Sandbox Code Playgroud)
我试图将其转换为List<Person>以Map<String, Map<LocalDate,List<Person>>>地方外映射的关键是personId和内部地图的关键是date,我无法弄清楚如何实现这一目标.到目前为止,尝试过如下所示的内容 也可以使用Java 8解决方案.
Map<String,Map<LocalDate,List<Person>>> outerMap = new HashMap<>();
Map<LocalDate,List<Person>> innerMap = new HashMap<>();
for(Person p : list) {
List<Person> innerList = new ArrayList<>();
innerList.add(p);
innerMap.put(p.getDate(), innerList);
outerMap.put(p.getPersonId(), innerMap);
}
Run Code Online (Sandbox Code Playgroud)
Eug*_*ene 17
list.stream()
.collect(Collectors.groupingBy(
Person::getPersonId,
Collectors.groupingBy(
Person::getDate
)));
Run Code Online (Sandbox Code Playgroud)
这个答案显示了如何使用流来完成它,另一个如何使用传统的迭代方法来完成它.这是另一种方式:
Map<String, Map<LocalDate, List<Person>>> 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
Run Code Online (Sandbox Code Playgroud)
这用于Map.computeIfAbsent创建一个新的innerMap并将其放在outerMapif not present(关键是personId)中,并且还创建一个new innerList并将其放入innerMapif if not present(关键字date).最后,Person添加到了innerList.
| 归档时间: |
|
| 查看次数: |
1010 次 |
| 最近记录: |