使用自定义Comparator在Java中创建SortedMap

unj*_*nj2 21 java sorting string treemap comparator

我想TreeMap用Java 创建一个自定义排序顺序.需要根据第二个字符对作为字符串的排序键进行排序.值也是字符串.

示例地图:

Za,FOO
Ab,Bar
Run Code Online (Sandbox Code Playgroud)

pol*_*nts 32

您可以使用这样的自定义比较器:

    Comparator<String> secondCharComparator = new Comparator<String>() {
        @Override public int compare(String s1, String s2) {
            return s1.substring(1, 2).compareTo(s2.substring(1, 2));
        }           
    };
Run Code Online (Sandbox Code Playgroud)

样品:

    SortedMap<String,String> map =
        new TreeMap<String,String>(secondCharComparator);
    map.put("Za", "FOO");
    map.put("Ab", "BAR");
    map.put("00", "ZERO");
    System.out.println(map); // prints "{00=ZERO, Za=FOO, Ab=BAR}"
Run Code Online (Sandbox Code Playgroud)

请注意,这只是假设String索引为1的字符.StringIndexOutOfBoundsException如果不是则抛出.


或者,您也可以使用此比较:

return s1.charAt(1) - s2.charAt(1);
Run Code Online (Sandbox Code Playgroud)

这个减法"技巧"一般会被打破,但它在这里工作正常,因为减去两个char不会溢出int.

但是substring,compareTo上面的解决方案更具可读性.

也可以看看: