![](/img/trans.png)
[英]How to sort List<List<String>> by first element of every list?
[英]Sort List of string arrays by first element
我想按相同列表的每個數組元素中的第一個元素以相反的順序對字符串數組列表進行排序,因此 2, 1, 0
這是我到目前為止嘗試過的:
List<String[]> array = new ArrayList<>();
String[] arr1 = {"0", "1/1"};
String[] arr2 = {"1", "1/2"};
String[] arr3 = {"2", "1/4"};
array.add(arr1);
array.add(arr2);
array.add(arr3);
Comparator<String[]> byFirstElement =
(String[] array1, String[] array2) -> Integer.parseInt(array1[0]) -
Integer.parseInt(array2[0]);
List<String[]> result = array.stream()
.sorted(array,byFirstElement) // error here
.collect(Collectors.toList());
問題是在排序行我有一個錯誤突出顯示,說:“排序(java.util.List,java.util.Comparator
Stream.sorted()
需要一個比較器(除了不帶參數的重載)。 所以你只需要...sorted(byFirstElement)...
(流對其元素進行排序)
請注意,您的比較邏輯不會按降序排序,因此您需要將其更改為
Comparator<String[]> byFirstElement =
(array1, array2) -> Integer.parseInt(array2[0]) - Integer.parseInt(array1[0]);
//reversed
或在調用sorted()
時反轉它:
....sorted(byFirstElement.reversed())
您可以使用Comparator.comparing
方法簡化代碼,如下所示:
List<String[]> list = List.of(
new String[]{"0", "1/1"},
new String[]{"1", "1/2"},
new String[]{"2", "1/4"});
List<String[]> sorted = list.stream()
.sorted(Comparator.comparing(
arr -> Integer.parseInt(arr[0]), Comparator.reverseOrder()))
.collect(Collectors.toList());
// output
sorted.stream().map(Arrays::toString).forEach(System.out::println);
輸出:
[2, 1/4]
[1, 1/2]
[0, 1/1]
也可以看看:
•如何使用自己的比較器按類的字段排序?
•按字母順序對二維字符串數組進行排序
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.