我想按降序对字符串列表进行排序。
我尝试了不同的比较器,但没有一个提供我想要的答案。
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 ...
答案 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 ) ;
}
排序时,不需要Comparator
。 Long
类知道如何排序,已经实现了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());