Сортировка ArrayList <String []> в алфавитном порядке - PullRequest
0 голосов
/ 28 августа 2018

Я относительно новичок в Java и хотел бы знать, как отсортировать ArrayList типа String [] в алфавитном порядке. В этом случае мое имя ArrayList - temp. В основном String [] будет содержать 3 элемента: String a, String b и String c. Я хочу отсортировать список массивов относительно строки a. Я использую Java 10.

Я пробовал это, но это не работает

ArrayList<String[]> temp = somefunction();
Collections.sort(temp);

Это ошибка, которая отображается:

sort(java.util.List<T>) in Collections cannot be applied 
      to(java.util.ArrayList<java.lang.String[]>)

1009 *

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Проблема в том, что вы не пытаетесь отсортировать список строк (например, «cat» меньше, чем «dog»). Вы пытаетесь отсортировать список массивов строк.

Является ли array ["cat", "dog"] меньше, чем array ["dog", "cat"]? Эта логика не существует по умолчанию, вам придется ее определить.

Пример кода

Вот пример (плохо только с использованием первого элемента):

public static void main(String[] args) {
    List<String[]> s = new ArrayList<>();
    s.add(new String[] {"dog", "cat"});
    s.add(new String[] {"cat", "dog"});
    s.sort((o1, o2) -> {
        //bad example, should check error conditions and compare all elements.
        return o1[0].compareTo(o2[0]);
    });

    //Outputs [cat, dog] then [dog, cat].
    s.forEach(x -> System.out.println(Arrays.toString(x)));
}
0 голосов
/ 28 августа 2018

Метод Collections.sort параметризован T, что означает, что условие <T extends Comparable<? super T>> должно быть выполнено. String[] не соответствует требованию, поскольку не распространяется Comparable.

Collections.<String[]>sort(new ArrayList<>());
Collections.<String>sort(new ArrayList<>());

Мы используем Collections.sort(List, Comparator), когда хотим отсортировать несопоставимые значения.

Collections.sort(new ArrayList<>(), (String[] a1, String[] a2) -> 0);
Collections.<String[]>sort(new ArrayList<>(), (a1, a2) -> 0);

Конечно, вы должны заменить фиктивный компаратор (String[] a1, String[] a2) -> 0 (который просто обрабатывает все элементы одинаково) реальным.

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