Сортировать список строковых массивов по первому элементу - PullRequest
0 голосов
/ 27 января 2020

Я хочу отсортировать список строковых массивов по первому элементу в каждом элементе массива того же списка, в обратном порядке, поэтому 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

1 Ответ

1 голос
/ 27 января 2020

Stream.sorted() принимает компаратор (в дополнение к перегрузке, которая не принимает аргументов). Так что все, что вам нужно, это ...sorted(byFirstElement)... (поток сортирует свои элементы)

Обратите внимание, что ваши логи сравнения c не будут сортироваться в порядке убывания, поэтому вам нужно либо изменить его на

Comparator<String[]> byFirstElement = 
    (array1, array2) -> Integer.parseInt(array2[0]) - Integer.parseInt(array1[0]);
                        //reversed

или наоборот при звонке sorted():

....sorted(byFirstElement.reversed())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...