我需要对一组字符串进行排序,其中包含数字。Ex: [15, 13, 14, 11, 12, 3, 2, 1, 10, 7, 6, 5, 4, 9, 8]
。我需要将其排序为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
。但是当我使用Collections.sort(keyList);
时,其中keyList是Set,我得到的结果是[1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9]
。请帮忙。
答案 0 :(得分:2)
编写自定义比较器并将其解析为Collections.sort(Collection,Comparator)
的参数。一种解决方案是将字符串解析为整数。
Collections.sort(keyList, new Comparator<String>()
{
@Override
public int compare(String s1, String s2)
{
Integer val1 = Integer.parseInt(s1);
Integer val2 = Integer.parseInt(s2);
return val1.compareTo(val2);
}
});
答案 1 :(得分:0)
你可以尝试:
final int[] searchList =
new int[] { 15, 13, 14, 11, 12, 3, 2, 1, 10, 7, 6, 5, 4, 9, 8 };
Arrays.sort(searchList);
结果是:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
列表必须为int
答案 2 :(得分:0)
首先将String
转换为Integer
。
List<Integer> ints = new ArrayList<>();
for (String s : strings)
ints.add(Integer.parseInt(s));
Collections.sort(ints);
如果您不需要重复值,则可以使用SortedSet
来自动维护订单:
SortedSet<Integer> ints = new TreeSet<>();
for (String s : strings)
ints.add(Integer.parseInt(s));
// all done!
答案 3 :(得分:0)
您的字符串将按自然顺序排序为字符串,而不是数字。因此,"11"
位于"10"
之后,"2"
将位于"11111111110"
之后。
怎么做?。
使用Integer.parseInt()
将集合中的每个String值解析为整数,然后将它们添加到集合中并调用Collections.sort()
。
答案 4 :(得分:0)
你可以像Kai说的那样做,并将你的String转换为整数并进行比较
但这是昂贵的操作,我建议这是:
keyList.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.length() == o2.length()){
return o1.compareTo(o2);
}
return o1.length() - o2.length();
}
});
如果您的号码长度相同,则使用String.compareTo
进行比较,否则按顺序对它们进行排序,因此1 2 3将自动在11 22等之前