具有下一张地图:
{
G1=[
User(id=1005, name=Jack, age=45),
User(id=1006, name=Carl, age=23),
User(id=1007, name=Thomas, age=20),
User(id=1008, name=Peter, age=19),
User(id=1009, name=John, age=47),
User(id=1010, name=Adrian, age=21),
User(id=1011, name=Mariah, age=18)
],
G2=[
User(id=1005, name=Alfred, age=23),
User(id=1006, name=Barack, age=22),
User(id=1007, name=Lee, age=36),
User(id=1008, name=Andrew, age=33),
User(id=1009, name=Sophia, age=22),
User(id=1010, name=Lauren, age=19),
User(id=1011, name=Mathias, age=33)
]
}
如何创建此地图:
{
47=[
User(id=1005, name=Jack, age=45),
User(id=1006, name=Carl, age=23),
User(id=1007, name=Thomas, age=20),
User(id=1008, name=Peter, age=19),
User(id=1009, name=John, age=47),
User(id=1010, name=Adrian, age=21),
User(id=1011, name=Mariah, age=18)
],
36=[
User(id=1005, name=Alfred, age=23),
User(id=1006, name=Barack, age=22),
User(id=1007, name=Lee, age=36),
User(id=1008, name=Andrew, age=33),
User(id=1009, name=Sophia, age=22),
User(id=1010, name=Lauren, age=19),
User(id=1011, name=Mathias, age=33)
]
}
其中的新键是从“用户”列表中获得age属性的最大值的结果。
在没有“用户”列表的值的地图中,此方法有效:
Original map: {G1=[45,23,20,19,47,21,18], G2=[23,22,36,33,22,19,33]}
Map<Integer, List<Integer>> newMap = mapa.entrySet().stream()
.collect(Collectors.toMap(e -> Collections.max(e.getValue()),
Map.Entry::getValue));
Result: {47=[45,23,20,19,47,21,18], 36=[23,22,36,33,22,19,33]}
但是通过“用户”列表,我可以在Collector.toMap中获取对象。
任何帮助将不胜感激。
答案 0 :(得分:-2)
从User
映射到他们的年龄,然后获得最大值:
source.values()
.stream()
.collect(toMap(l -> l.stream()
.mapToInt(User::getAge)
.max().getAsInt(), Function.identity()));
或使用Collections.max
:
source.values()
.stream()
.collect(toMap(l -> Collections.max(l,
Comparator.comparingInt(User::getAge)).getAge(), Function.identity()));