gpt4 book ai didi

java - 如何使用基于 "external"值的比较器创建 TreeMap

转载 作者:行者123 更新时间:2023-11-30 03:31:10 24 4
gpt4 key购买 nike

我有一个Map<String, Integer> otherMap它将字符串的属性映射到一些关联的整数值。

现在我想要一个TreeMap<String, String>根据 otherMap 中的关联整数对键进行排序.

我应该如何解决这个问题,需要记住什么?

(这是 this question 的后续内容。)

最佳答案

编写比较器时,重要的是要确保结果一致(即随着时间的推移相同)并且它实现 total order .

TreeMap 中使用比较器时,还要求它与 equals 一致,这意味着 c.compare(e1, e2) 当且仅当 e1.equals(e2) 时返回 0

考虑到这一点,可以按如下方式实现正确的比较器:

class MyComparator implements Comparator<String> {

Map<String, Integer> otherMap;

public MyComparator(Map<String, Integer> otherMap) {
this.otherMap = otherMap;
}

@Override
public int compare(String o1, String o2) {
int primary = otherMap.get(o1).compareTo(otherMap.get(o2));
if (primary != 0)
return primary;
// Fall back on comparing the string keys to ensure consistent results
return o1.compareTo(o2);
}
}

(应该注意的是,otherMap 在传递给 MyComparator 后永远不会改变,这一点也很重要。)

<小时/>

在 Java 8 中,惯用的解决方案如下所示

Comparator.comparing(k -> otherMap.get(k))
.thenComparing(k -> k);

关于java - 如何使用基于 "external"值的比较器创建 TreeMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29005998/

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