gpt4 book ai didi

java - 根据数值对 Map 的字符串键进行排序

转载 作者:行者123 更新时间:2023-12-01 16:35:32 30 4
gpt4 key购买 nike

我需要编写一个处理 Map<String, String[]> 的类,根据其数字顺序处理其键。雪上加霜的是,有些键不是有效的整数,它们应该在最后按照字典顺序进行处理。

例如,如果键是:

["10", "2", "100", "duck", "black"]

它们应该按此顺序迭代 -

["2", "10", "100", "black", "duck"]

除了迭代和 try catch 之外,在 Java 中最优雅的方法是什么 NumberFormatException ?显然,我无法控制给定 map 的格式。

最佳答案

由于您需要以不是输入映射的自然顺序的特定顺序进行迭代,因此您需要将其转储到另一个映射中(如果不需要每个键的关联值,则需要将其转储到列表中)。将 TreeMap 与自定义比较器结合使用:

class NumbersThenWordsComparator implements Comparator<String> {
private static Integer intValue(String s) {
try {
return Integer.valueOf(s);
} catch (NumberFormatException e) {
return null;
}
}

@Override
public int compare(String s1, String s2) {
Integer i1 = intValue(s1);
Integer i2 = intValue(s2);
if (i1 == null && i2 == null) {
return s1.compareTo(s2);
} else if (i1 == null) {
return -1;
} else if (i2 == null) {
return 1;
} else {
return i1.compareTo(i2);
}
}
}

public void myMethod(Map<String, String[]> originalMap) {
TreeMap<String, String[]> t =
new TreeMap<String, String[]>(new NumbersThenWordsComparator());
t.putAll(originalMap);
// now iterate over t, which will produce entries in the desired order
}

关于java - 根据数值对 Map 的字符串键进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9556092/

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