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 ) ;
}
要排序,不需要Comparator
。 Long
class 知道如何排序,实现了 Comparable
接口。
使用 Collections
class' 实用方法排序。
Collections.reverseOrder( longs ) ;
既然你标记了Java 8,你也可以考虑流。下面的表达式通过将字符串解析为 long
s.
来反转数字顺序
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());
我想按降序对字符串列表进行排序。
我尝试了不同的比较器,但 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 ) ;
}
要排序,不需要Comparator
。 Long
class 知道如何排序,实现了 Comparable
接口。
使用 Collections
class' 实用方法排序。
Collections.reverseOrder( longs ) ;
既然你标记了Java 8,你也可以考虑流。下面的表达式通过将字符串解析为 long
s.
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());