我有以下代码,将年龄相同且得分最高的用户分组。
我现在有而不是Map<Person, List<String>>
一个名为 Person 的对象,在 person 类中有 MapMap<String,Double> nameScoreTogether;
。我需要将输出及其信息(名称和相应的分数)存储在人员对象的地图中,那么我如何相应地更改代码?
输入: 数据类型为Map<Person, String>
:
{Person has at Age: 12 (Score: 50)
=alex,
Person has at Age: 16 (Score: 50)
=miki,
Person has at Age: 5 (Score: 100)
=shi,
Person has at Age: 4 (Score: 50)
=rafi,
Person has at Age: 1 (Score: 50)
=sharbel,
Person has at Age: 5 (Score: 0)
=thomas,
Person has at Age: 14 (Score: 60)
=thomy,
Person has at Age: 14 (Score: 50)
=angelos,
Person has at Age: 11 (Score: 50)
=musti,
Person has at Age: 11 (Score: 100)
=aloo,
Person has at Age: 2 (Score: 50)
=evi}
预期输出是:
Person(score=50.0, age=1) - [sharbel=50.0]
Person(score=100.0, age=11) - [aloo=100.0, musti=50.0]
Person(score=50.0, age=12) - [Alex=50.0]
Person(score=60.0, age=14) - [thomy=60.0, angelos=50.0]
Person(score=50.0, age=2) - [evi=50.0]
Person(score=100.0, age=5) - [shi=100.0, Thomas=5.0]
Person(score=50.0, age=4) - [rafi=50]
Person(score=50.0, age=16) - [miki=50]
尝试代码:但现在我有List<Person>
其中有Map<String,Double>
Map<Person, List<String>> result = origin.entrySet().stream()
.collect(Collectors.groupingBy(e -> e.getKey().getAge())).entrySet().stream()
.collect(Collectors.toMap(
e -> e.getValue().stream()
.map(Map.Entry::getKey)
.max(Comparator.comparing(Person::getScore))
.get(),
e -> e.getValue().stream()
.map(Map.Entry::getValue)
.collect(Collectors.toList()))
);
班级人物:
public class Person {
int Age;
int lineScoreMax;
Map<String, Double> nameScoreTogether;
}