Ada*_*tan 0 java sorting key map
我需要编写一个处理a的类,Map<String, String[]>
根据它们的数字顺序处理它的键.为了增加对伤害的侮辱,一些键不是有效的整数,它们应该在最后以加入的词典顺序处理.
例如,如果键是:
["10", "2", "100", "duck", "black"]
Run Code Online (Sandbox Code Playgroud)
他们应该按此顺序迭代 -
["2", "10", "100", "black", "duck"]
Run Code Online (Sandbox Code Playgroud)
除了迭代和尝试捕获之外,在Java中最优雅的方法是什么NumberFormatException
?显然,我无法控制给定地图的格式.
由于您需要以不是输入映射的自然顺序的特定顺序进行迭代,因此您需要将其转储到另一个映射(如果不需要每个键的关联值,则将其转储到列表中).使用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
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3822 次 |
最近记录: |