java - 使用自定义比较器在 Java 中创建 SortedMap

标签 java string sorting comparator treemap

我想在 Java 中创建一个具有自定义排序顺序的 TreeMap。排序后的键是字符串,需要根据第二个字符进行排序。值也是字符串。

示例 map :

Za,FOO
Ab,Bar

最佳答案

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

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

示例:

    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}"

请注意,这只是假设 String 在索引 1 处有一个字符。如果没有,它会抛出 StringIndexOutOfBoundsException


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

return s1.charAt(1) - s2.charAt(1);

这个减法“技巧”通常被破坏,但它在这里工作正常,因为两个 char 的减法不会溢出 int

不过,上面的 substringcompareTo 解决方案更具可读性。

另见:

关于java - 使用自定义比较器在 Java 中创建 SortedMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2748829/

相关文章:

java - 错误 : java. util.concurrent.ExecutionException : com. android.builder.internal.aapt.v2.Aapt2Exception:AAPT2 错误:查看日志了解详细信息

Java 将输出行替换为标准输出

string - 有没有像 "firstIndexOf"这样的代码?

java - 如何删除 TextView 中两个相同字符串值之一?

c - 字符串比较循环问题

performance - 为什么 BUILD-MAX-HEAP 需要时间 O(n) 而 HEAP-SORT 需要 O(nlgn) 时间?

python - 如何按权重对两个成对元素的列表进行排序?

java - SQLite:如何插入未完整填充列的文档?

java - 从 SWT 浏览器销毁 Cookie

java - 如何使用带有比较器的 Java ConcurrentNavigableMap 而不是 TreeMap?