【问题标题】:Sorting an ArrayList of numbers, in numerical order [duplicate]按数字顺序对数字的ArrayList进行排序[重复]
【发布时间】:2019-08-19 15:59:02
【问题描述】:

我有一个数字的 String 列表(可以是 int 列表,只需将其转换为数组列表即可返回),这个数字可以是一个范围,例如从 1 到 25。

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

1
10
11
..
2
20
21
..

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

1
2
3
..
10
11
..

尝试将它们排序为int[]Arrays.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));
}

【问题讨论】:

  • 当你将它们作为字符串排序时,它会给你一个字母数字顺序,其中“10”在“2”之前。排序整数应该可以工作,你可能没有正确地做,但你没有显示你的代码,所以我们不能帮助你。
  • @MK。我进行了编辑以展示我第一次尝试排序的方式,并将它们作为整数。
  • 写一个完整的例子 (MCVE),向我们展示你是如何创建你的初始列表或数组的。
  • 你写的代码应该可以工作,我试过了,它似乎可以工作。repl.it/repls/DesertedCrazySites

标签: java sorting arraylist


【解决方案1】:

我觉得我以前见过这个,但您可以在 Java 8+ 中尝试以下操作(其中numbersList 是 String[]):

Arrays.sort(numbersList, Comparator.comparing(Integer::valueOf));

另外,在你的代码中,你的range的初始化有问题,因为Integer.parseInt的括号没有闭合,参数错误。应替换为以下内容:

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

执行此操作后您不需要排序,因为IntStream.rangeClosed 承诺 IntStream 中的所有元素都将按排序顺序提供。如果您想了解有关如何正确使用 Integer.parseInt 的更多信息,我强烈建议您查看Javadoc

【讨论】:

  • 请注意,第一条语句也适用于int[],因为整数提供valueOf that takes int
  • 是的,我刚刚注意到,在代码中有正确的 parseInt,为了更好的示例,我尝试删除它们,但忘记了第一个。不过这行得通!
【解决方案2】:

如果您有一个字符串列表,则需要将它们作为整数进行比较以进行排序。在 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]

【讨论】:

    【解决方案3】:

    一个更有效的选择是坚持比较ints(原语)而不是Integers(对象):

    Arrays.sort(numbers, Comparator.comparingInt(Integer::parseInt));

    【讨论】:

      猜你喜欢
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 2019-02-03
      • 2014-05-14
      • 2019-08-02
      • 1970-01-01
      相关资源
      最近更新 更多