如何在对象的哈希图中按键排序而不覆盖比较?



我有这个哈希图Map<Person, List<Information>>。如何按类Person中的双精度属性以相反的顺序对这张地图进行排序?

我试过这个:

origin.entrySet().stream()
.sorted(Comparator.comparingDouble(k -> k.getKey().getScore())
.collect(
Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(oldValue, newValue) -> oldValue,
LinkedHashMap::new));

它可以工作,但由于我在getScore()末尾使用了函数.reversed,因此getKey()返回错误。Cannot resolve method 'getKey' in 'Object

班级人员:

public class Person{
double score;
Information information;
}

解决此问题的一种简单方法是将比较器移出流管道:

Comparator<Entry<Person,List<Information>>> byScore = Comparator.comparingDouble(k -> k.getKey().getScore());
origin.entrySet().stream()
.sorted(byScore.reversed())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(oldValue, newValue) -> oldValue,
LinkedHashMap::new));

或在 lambda 中提供显式参数类型:

origin.entrySet().stream()
.sorted((Comparator.comparingDouble((Entry<Person,List<Information>> k) -> k.getKey().getScore())).reversed())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(oldValue, newValue) -> oldValue,
LinkedHashMap::new));

最新更新