【问题标题】:how to create a comparator of key in a map where the value of the key is a string in java?java - 如何在映射中创建键的比较器,其中键的值是java中的字符串?
【发布时间】:2011-01-06 09:03:21
【问题描述】:

如何在映射中创建键的比较器,其中键的值是java中的字符串?

因为我想交换地图中键的值?

有没有办法对存储在字符串变量中的这些数字进行排序?

树图<String,List<QBFElement>> qbfElementMap = new TreeMap<String, List<QBFElement>>();

27525-1813, 27525-3989, 27525-4083, 27525-4670, 27525-4911, 27526-558,
27526-1303, 27526-3641, 27526-4102, 27527-683, 27527-2411, 27527-4342

这是键列表,每个键的值都是一个列表。
现在,我如何按数字升序对该键进行排序。

例如。如果我想排序:1,2,11,20,31,3,10
我想要的输出是:1,2,3,10,11,20,31
但是当我使用树图的自动排序时,输出变为:1,10,11,2,20,3,31

如何按数字升序排序?

语言是java :) 谢谢:)

【问题讨论】:

标签: list sorting tree key swap


【解决方案1】:

当您创建 TreeMap 时,提供一个按您期望的方式排序的 Comparator。

Map<String,List<QBFElement>> qbfElementMap = 
    new TreeMap<String,List<QBFElement>>(new Comparator<String>() {
        @Override
        public int compare(Object o1, Object o2) {
            // compare your strings in ways that you understand
            // presumably 11111-0000 sorts before 11111-0001
            // left as an exercise for the reader
        }
        @Override
        public boolean equals(Object o) {
            return this == o;
        }
    });

但请阅读 Comparator 的文档,包括有关实现 Serializable 的部分,因为在可序列化数据结构(如 TreeMap)中使用 Comparator 时需要特别注意

【讨论】:

    【解决方案2】:

    您可能想用自己的方法覆盖 String 的默认比较器函数。

    由于这可能会搞砸其他字符串的比较,我建议定义一个包含字符串并实现 Comparable 的 NumericString 类,并在地图中使用它而不是 String。

    【讨论】:

    • 不,您想为 TreeMap 提供一个比较器,然后用于排序...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2013-10-30
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    相关资源
    最近更新 更多