gpt4 book ai didi

java - 如何编写自定义比较器来对 SortedMap 进行排序?

转载 作者:行者123 更新时间:2023-11-29 08:20:29 25 4
gpt4 key购买 nike

我是 Java 的新手,正在学习集合。作为练习,我正在尝试使用自定义比较器对 SortedMap 进行排序。我希望能够按平均成绩降序对学生 SortedMap 进行排序。

SortedMap <String, Student> students = new TreeMap <String, Student> ();

public class Student {
private String name;
private List<Integer> marks = new ArrayList<Integer>();

public Student(String n) {
this.name = n;
}

public String getName() {
return this.name;
}

public Double getAvg() {
return this.getStats()
.getAverage();
}

public void addMark(Integer mark) {
this.marks.add(mark);
}

public DoubleSummaryStatistics getStats() {
return this.marks.stream()
.mapToDouble(mark -> mark)
.summaryStatistics();
}

@Override
public String toString() {
return this.name + " " + getStats().getCount() + " " + getStats().getAverage();
}
}

我能够弄清楚如何构建一个返回集合的自定义比较器:

SortedSet<Map.Entry<String, Student>> meritSet = new TreeSet<Map.Entry<String, Student>>(
new Comparator<Map.Entry<String, Student>>() {
@Override
public int compare(Map.Entry<String, Student> s1,
Map.Entry<String, Student> s2) {

Double s1Avg = students.get(s1.getKey()).getStats().getAverage();
Double s2Avg = students.get(s2.getKey()).getStats().getAverage();

return s1Avg.compareTo(s2Avg);
}
}
);

meritSet.addAll(students.entrySet());

我如何编写返回 SortedMap 而不是 SortedSet 的自定义比较器?

最佳答案

您要做的是根据它的值对 Map 进行排序。然而,这不是 SortedMap 可以实现的。 .

A Map that further provides a total ordering on its keys.

如果您只想将它​​们排序存储在 Map 中,而不需要在您添加新值时仍然对 Map 进行排序,您可以将所有条目存储在 LinkedHashMap 中:

Map<String, Studen> meritMap = meritSet.stream()
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, LinkedHashMap::new));

虽然这不会为您提供 SortedMap,但是 Map 将被排序。

关于java - 如何编写自定义比较器来对 SortedMap 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59307434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com