我正在尝试对由数字和字母组成的字符串数组列表进行排序,排序后的列表示例如下:
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
任何想法我正在寻找的那种类型会被称为或如何做?
String
s 默认按字母顺序排列。您需要实现自己的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
并且可以对其进行排序