java中字符串数字的排序集
我需要对一组保存数字的字符串进行排序。java中字符串数字的排序集,java,sorting,collections,set,Java,Sorting,Collections,Set,我需要对一组保存数字的字符串进行排序。例如:[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的地方,获得的reult i是[1、10、11、12、13、14、15、2、3、4、5、6、7、8、9]。请提供帮助。您可以尝试以下方法: final int[] searchList =
例如:[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的地方,获得的reult i是[1、10、11、12、13、14、15、2、3、4、5、6、7、8、9]
。请提供帮助。您可以尝试以下方法:
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
编写一个自定义比较器,并将其作为参数解析为集合。排序(集合,比较器)
。一种解决方案是将字符串解析为整数
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);
}
});
Collections.sort(keyList,newcomparator()
{
@凌驾
公共整数比较(字符串s1、字符串s2)
{
Integer val1=Integer.parseInt(s1);
整数val2=Integer.parseInt(s2);
返回val1.compareTo(val2);
}
});
首先将字符串
s转换为整数
s
List<Integer> ints = new ArrayList<>();
for (String s : strings)
ints.add(Integer.parseInt(s));
Collections.sort(ints);
您的字符串将按自然顺序排序为字符串,而不是数字。因此,
“11”
位于“10”
之后,“2”
将位于“11111110”
之后
怎么办
使用
Integer.parseInt()
将集合中的每个字符串值解析为整数,然后将它们添加到集合中并调用Collections.sort()您可以按照Kai所说的操作,将字符串转换为整数并进行比较
但这是一种昂贵的操作,我的建议是:
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();
}
});
keyList.sort(新的比较器(){
@凌驾
公共整数比较(字符串o1、字符串o2){
如果(o1.length()==o2.length()){
返回o1。与(o2)相比;
}
返回o1.length()-o2.length();
}
});
如果您的数字长度相同,请使用字符串进行比较。compareTo
,否则,请按顺序对其进行排序,这样12 3将自动排在11 22之前,以此类推字符串比较是按字母顺序进行的。尝试将其转换为整数列表以获得所需结果。请发布您使用的实际代码。Collections.sort接受比较器作为参数。这使您能够自己定义比较函数。(有效地,修改为int,然后比较值)
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();
}
});