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

时间:2011-01-06 09:03:21

标签: list sorting tree key swap

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

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

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

TreeMap的<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
但是当我使用treemap的autosort输出时:1,10,11,2,20,3,31

我怎样才能按数字升序排序?

,语言是java :)谢谢:)

2 个答案:

答案 0 :(得分: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的文档,因为在可序列化数据结构中使用Comparator时会特别注意,比如TreeMap

答案 1 :(得分:0)

您可能希望使用自己的字符串覆盖String的默认比较器函数。

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