簡體   English   中英

按第一個元素對字符串數組列表進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM