Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中字符串数字的排序集_Java_Sorting_Collections_Set - Fatal编程技术网

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();
        }
    });