0

我正在尝试对由数字和字母组成的字符串数组列表进行排序,排序后的列表示例如下:

name 1
name 2
name 3
name 11
name 12
name 13

但是当我使用 collections.sort() 时,它会以这种方式排序:

name 1
name 11
name 12
name 13
name 2
name 3

任何想法我正在寻找的那种类型会被称为或如何做?

4

5 回答 5

7

Strings 默认按字母顺序排列。您需要实现自己的Comparator<String>或使用实现Comparable(或Comparator与它一起使用)的对象来解决这个问题,特别是因为String您使用的 s 是单词和整数的混合。

于 2013-05-09T18:17:23.923 回答
1

实现 comprable,覆盖 compareTo,解析 int 和名称,然后你可以对它们进行排序。你想按数字排序还是同时按两者排序

于 2013-05-09T18:19:55.990 回答
1

发生这种情况是因为它按字母顺序排序,一次查找一个字符。

name 13
name 2

这里,“ name”是同一个部分,往前走,你有“ 1”和“ 2”。1来之前2。请记住132这里只是字符串而不是数字。

您可以编写自己的比较器。实现你正在尝试的东西。

于 2013-05-09T18:24:06.237 回答
0

按照其他人的建议,您可以编写自己的Comparator,如下所示

      Comparator<? super String> myComparator = new Comparator<String>() {

        public int compare(String name1, String name2) {
            int num1 = Integer.parseInt(name1.split(" ")[1]);
            int num2 = Integer.parseInt(name2.split(" ")[1]);
            // > : Increasing order 
            // < : Decreasing order
            if(num1 < num2)
                    return 1;
            else
                    return -1;
        }

      };
      Collections.sort(names, myComparator);

输出:

姓名 91
姓名 12
姓名 11
姓名 2

于 2013-05-09T18:28:18.990 回答
0

您可以使用HashMap<Integer,String> map并且可以对其进行排序

于 2013-05-09T18:20:45.557 回答