作者:企鹅之神魔大陆_544 | 来源:互联网 | 2022-12-20 19:45
我有List
哪里Person
如下是.
class Person {
String personId;
LocalDate date;
String type;
// getters & setters
}
我试图将其转换为List
以Map>>
地方外映射的关键是personId
和内部地图的关键是date
,我无法弄清楚如何实现这一目标.到目前为止,尝试过如下所示的内容 也可以使用Java 8解决方案.
Map>> outerMap = new HashMap<>();
Map> innerMap = new HashMap<>();
for(Person p : list) {
List innerList = new ArrayList<>();
innerList.add(p);
innerMap.put(p.getDate(), innerList);
outerMap.put(p.getPersonId(), innerMap);
}
Eugene..
17
list.stream()
.collect(Collectors.groupingBy(
Person::getPersonId,
Collectors.groupingBy(
Person::getDate
)));
Federico Per..
7
这个答案显示了如何使用流来完成它,另一个如何使用传统的迭代方法来完成它.这是另一种方式:
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
这用于Map.computeIfAbsent
创建一个新的innerMap
并将其放在outerMap
if not present(关键是personId
)中,并且还创建一个new innerList
并将其放入innerMap
if if not present(关键字date
).最后,Person
添加到了innerList
.
1> Eugene..:
list.stream()
.collect(Collectors.groupingBy(
Person::getPersonId,
Collectors.groupingBy(
Person::getDate
)));
2> Federico Per..:
这个答案显示了如何使用流来完成它,另一个如何使用传统的迭代方法来完成它.这是另一种方式:
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
这用于Map.computeIfAbsent
创建一个新的innerMap
并将其放在outerMap
if not present(关键是personId
)中,并且还创建一个new innerList
并将其放入innerMap
if if not present(关键字date
).最后,Person
添加到了innerList
.
很高兴知道`Map.computeIfAbsent`.谢谢费德里科!