Java 降序排列

Java Sorting in Descending order

我想按降序对字符串列表进行排序。

我尝试了不同的比较器,但 none 给出了我正在寻找的答案。

public class arrasss {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        List<String> a1 = Arrays.asList("7560923143", "7560923053", "7560922899", "7560922344", "7560504628",
                "7280202486", "7280202087", "7280202068", "353549090116186", "353549090116079", "353549090114991",
                "353549090113191", "353549090112896", "353549090000007");

        a1.sort(Comparator.reverseOrder());
        // Collections.reverse(a1);

        System.out.println(a1);

    }

}

Received Answer: [7560923143, 7560923053, 7560922899, 7560922344, 7560504628, 7280202486, 7280202087, 7280202068, 353549090116186, 353549090116079, 353549090114991, 353549090113191, 353549090112896, 353549090000007]

预期答案:353549090116186 353549090116079 353549090114991 353549090113191 353549090112896 353549090000007 7560923143...

类型错误:Long,不是String

字符串按字母顺序排序,比较第一个字母和第一个字母。在平局中,比较第二个字母。等等。

对于数字排序,您需要数字。将字符串转换为数字。

Long myLong = Long.valueOf( "353549090000007" ) ;

如果将这些数字输入到您的源代码中,请使用文字。

在数字文字中,您可以随意在任意位置输入下划线。 Java 忽略下划线字符。它们的存在严格来说是为了帮助人类阅读。

Long myLong = 353_549_090_000_007L ;

在上面那行中,请注意 Java 的 auto-boxing 功能在起作用。在右侧,我们创建了一个原始 long 值。该原语自动用于实例化 Long 对象。

使用方便的 List.of 方法定义您的输入。

List< String > inputs = List.of("7560923143", "7560923053", "7560922899", "7560922344", "7560504628",
            "7280202486", "7280202087", "7280202068", "353549090116186", "353549090116079", "353549090114991",
            "353549090113191", "353549090112896", "353549090000007");

定义一个Long的列表来收集我们从这些字符串转换而来的对象。将大小与输入列表匹配。

int initialCapacity = inputs.size() ;
List< Long > longs = new ArrayList<>( initialCapacity ) ;

使用 for-each 语法循环输入。将每个输入 String 解析为 Long

for( String input : inputs ) {
    Long x = Long.valueOf( input )  ;
    longs.add( x ) ;
}

要排序,不需要ComparatorLong class 知道如何排序,实现了 Comparable 接口。

使用 Collections class' 实用方法排序。

Collections.reverseOrder( longs ) ;

既然你标记了Java 8,你也可以考虑流。下面的表达式通过将字符串解析为 longs.

来反转数字顺序
List<String> a = 
  Stream.of("7560923143", "7560923053", "7560922899", "7560922344", "7560504628",
    "7280202486", "7280202087", "7280202068", "353549090116186", "353549090116079",
    "353549090114991", "353549090113191", "353549090112896", "353549090000007")
      .sorted(Comparator.<String>comparingLong(Long::parseLong).reversed())
      .collect(toList());