猿问

按数字顺序对数字的 ArrayList 进行排序

我有一个数字字符串列表(它们可以是一个 int 列表,只需要将它变成一个数组列表即可返回),这个数字可以来自一个范围,例如从 1 到 25。


我尝试使用对它们进行排序Collections.sort(numbersList);,但它以一种奇怪的方式对它们进行排序。例如,这是当前排序:


1

10

11

..

2

20

21

..

我真正想要的是按数字顺序对它进行排序,例如:


1

2

3

..

10

11

..

试图将它们排序为int[]withArrays.sort(numbers);但它给出了相同的结果。


这是我用来生成数字并将它们转换为数组列表的代码。


int[] range = IntStream.rangeClosed(1, 30).toArray();

Arrays.sort(range);

List<String> rangeList = new ArrayList<>();

for (int number : range) {

    rangeList.add(String.valueOf(number));

}


qq_花开花谢_0
浏览 133回答 3
3回答

慕慕森

我觉得我以前见过这个,但你可以在 Java 8+ 中尝试以下操作(numbersListString[] 在哪里):Arrays.sort(numbersList, Comparator.comparing(Integer::valueOf));此外,在您的代码中,您的 初始化有问题range,因为 Integer.parseInt 的括号未关闭,并且参数错误。它应该替换为以下内容:int[] range = IntStream.rangeClosed(1, 30).toArray();执行此操作后不需要排序,因为IntStream.rangeClosed承诺 IntStream 中的所有元素都将按排序顺序提供。

森栏

如果您有一个字符串列表,则需要将它们作为整数进行比较以进行排序。在 Java 8+ 中,您可以执行以下操作:listOfStrings.sort( Comparator.comparing( Integer::valueOf ) );例子 :List< String > strings = Arrays.asList( "1","3","0","21","4","2","3");strings .sort( Comparator.comparing( Integer::valueOf ) );System.out.println( strings );//prints [0, 1, 2, 3, 3, 4, 21]

桃花长相依

一个更有效的替代方法是坚持比较ints(基元)而不是Integers(对象):Arrays.sort(numbers, Comparator.comparingInt(Integer::parseInt));
随时随地看视频慕课网APP

相关分类

Java
我要回答