Java降序排序

时间:2019-06-22 17:00:04

标签: java sorting java-8 alphanumeric

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

我尝试了不同的比较器,但没有一个提供我想要的答案。

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

    }

}

收到的答复:[7560923143、7560923053、7560922899、7560922344、7560504628、7280202486、7280202087、7280202068、353549090116186、353549090116079、353549090114991、353549090113191、353549090112896、353549090000007]]

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

2 个答案:

答案 0 :(得分:-1)

类型错误:Long,而不是String

字符串按字母顺序排序,将首字母与首字母进行比较。在平局中,比较第二个字母。依此类推。

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

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

如果在源代码中键入这些数字,请使用文字。

在数字文字中,请随时在任何需要的地方键入下划线。下划线字符被Java忽略。它们的存在严格地是为了辅助人类阅读。

Long myLong = 353_549_090_000_007L ;

在上面的那一行中,请注意实际使用的Java的自动装箱功能。在右侧,我们创建一个原始的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类知道如何排序,已经实现了Comparable接口。

使用Collections类的实用程序方法进行排序。

Collections.reverseOrder( longs ) ;

答案 1 :(得分:-1)

由于您已标记Java 8,因此也可以考虑流。下面的表达式通过将字符串解析为long来颠倒数字顺序。

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

相关问题