我正在尝试对由数字和字母组成的字符串数组列表进行排序,排序后的列表示例如下:
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
任何想法我正在寻找的那种类型会被称为或如何做?
我正在尝试对由数字和字母组成的字符串数组列表进行排序,排序后的列表示例如下:
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
任何想法我正在寻找的那种类型会被称为或如何做?
Strings 默认按字母顺序排列。您需要实现自己的Comparator<String>或使用实现Comparable(或Comparator与它一起使用)的对象来解决这个问题,特别是因为String您使用的 s 是单词和整数的混合。
实现 comprable,覆盖 compareTo,解析 int 和名称,然后你可以对它们进行排序。你想按数字排序还是同时按两者排序
发生这种情况是因为它按字母顺序排序,一次查找一个字符。
name 13
name 2
这里,“ name”是同一个部分,往前走,你有“ 1”和“ 2”。1来之前2。请记住13,2这里只是字符串而不是数字。
您可以编写自己的比较器。实现你正在尝试的东西。
按照其他人的建议,您可以编写自己的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
您可以使用HashMap<Integer,String> map并且可以对其进行排序