相关疑难解决方法(0)

Java TreeMap自定义比较器奇怪的行为

我正在尝试创建一个Map带有排序的键,首先按字母顺序排序,最后按数字排序.为此,我使用了TreeMap一个自定义Comparator:

public static Comparator<String> ALPHA_THEN_NUMERIC_COMPARATOR =
    new Comparator<String> () {

        @Override
        public int compare(String first, String second) {
            if (firstLetterIsDigit(first)) {
                return 1;
            } else if (firstLetterIsDigit(second)) {
                return -1;
            }
            return first.compareTo(second);
        }
    };

private static boolean firstLetterIsDigit(String string) {
    return (string == null) ? false : Character.isDigit(string.charAt(0));
}
Run Code Online (Sandbox Code Playgroud)

我写了下面的单元测试来说明出了什么问题:

@Test
public void testNumbericallyKeyedEntriesCanBeStored() {
    Map<String, String> map = new HashMap<>();
    map.put("a", "some");
    map.put("0", "thing");
    TreeMap<String, String> treeMap = new TreeMap<>(ALPHA_THEN_NUMERIC_COMPARATOR);
    treeMap.putAll(map);

    assertEquals("some", …
Run Code Online (Sandbox Code Playgroud)

java treemap comparator

7
推荐指数
1
解决办法
512
查看次数

标签 统计

comparator ×1

java ×1

treemap ×1