gpt4 book ai didi

java - 在对 Map 进行排序时确定某些字符串优先级的最佳方法

转载 作者:搜寻专家 更新时间:2023-11-01 03:04:22 24 4
gpt4 key购买 nike

我想对带有字符串的映射进行排序,以便某些字符串具有优先级,其余字符串则照常排序。

像这样:

"Dan",   "value"  //priority 1
"Eric", "value" //priority 2
"Ann", "value" //priority 3
"Bella", "value" //no priority
"Chris", "value" //no priority

就像在 this 中一样问题。

我正在使用 TreeMap,我当前的比较方法如下所示:

public int compare(String o1, String o2) {
if (o1.equals(o2)) return 0;
if (o1.equals("Dan")) return -1;
if (o2.equals("Dan")) return 1;
if (o1.equals("Eric")) return -1;
if (o2.equals("Eric")) return 1;
if (o1.equals("Ann")) return -1;
if (o2.equals("Ann")) return 1;
else return o1.compareTo(o2);
}

如您所见,对于优先级更高的字符串,这会变得相当麻烦。

有更好的方法吗?


解决方案(感谢 amit 的想法):使用第二张 map 存储优先级:

TreeMap<String, Integer> prio = new TreeMap<>();
prio.put("Dan", 1);
prio.put("Eric", 2);
prio.put("Ann", 3);

comparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (prio.containsKey(o1)) {
if (prio.containsKey(o2)) {
return prio.get(o1).compareTo(prio.get(o2));
} else return -1;
} else if (prio.containsKey(o2)) {
return 1;
} else return o1.compareTo(o2);
}
};

最佳答案

使用第二张 map :

Map<String,Integer> prio其中值是每个字符串的优先级。

在您的比较器中 - 首先根据 prio.get(o1).compareTo(prio.get(o2)) 进行比较1,并且仅当结果为 0 时,回退到常规字符串的 compareTo() .

重要的是 prio在你的 map 之后不会改变已创建,否则您的 map 将完全困惑,无法正确查找和插入元素。


(1) 确保这两个元素首先存在于prio中, 如果没有 - 解决。

关于java - 在对 Map 进行排序时确定某些字符串优先级的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27765438/

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