Помогите понять логику выполнения программы. У нас есть 3 массива стрингов, они записаны в ArrayList, я сортирую их по количеству элементов в листе. То чего я не могу понять: как происходит эта сортировка? Что здесь происходит?
Comparator<String[]> sortByLength = new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1.length - o2.length;
}
};
public class T{
public static void main(String[] args) {
String[] array1 = {"мама", "мыла", "раму"};
String[] array2 = {"я", "очень", "люблю", "java"};
String[] array3 = {"мир", "труд", "май"};
List<String[]> arrays = new ArrayList<>();
arrays.add(array1);
arrays.add(array2);
arrays.add(array3);
Comparator<String[]> sortByLength = new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1.length - o2.length;
}
};
arrays.sort(sortByLength);
for (String[] str : arrays) {
System.out.println(Arrays.toString(str));
}
}
}
Сортировка у вас происходит тут arrays.sort(sortByLength);
arrays
это у вас объект ArrayList
у него есть метод sort
которому для сортировки вы передаете объект реализующий интерфейс Comparator
В данный коде блока
Comparator<String[]> sortByLength = new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1.length - o2.length;
}
};
вы реализуете анонимный класс используя интерфейс Comparator
у него есть метод compare
который принимает два объекта и для сортировки возращяет.
0 : если объекты равны
-1 (не обязательно -1, должно быть любое отрицательное число) : если o1 < o2
1 (любое положительное число) : если o1 > o2
UDP. Это код старый. до Java 8. В Java 8 появились лямба функции которые дают более элегантный код, например так:
arrays.sort((o1, o2) -> o1.length - o2.length);
/// или
arrays.sort(Comparator.comparingInt(o -> o.length));
Компаратор сравнивает текущее значение и следующее. То есть у вас сравненине будет примерно такое
{"я", "очень", "люблю", "java"} > {"мама", "мыла", "раму"} = 1
{"мир", "труд", "май"} < {"я", "очень", "люблю", "java"} = -1
{"мир", "труд", "май"} < {"я", "очень", "люблю", "java"} = 1
{"мама", "мыла", "раму"} < {"мир", "труд", "май"} = 0
На основании этих значений, компоратор поставит в порядке возрастания в зависимости от длины массива.
[мама, мыла, раму]
[мир, труд, май]
[я, очень, люблю, java]
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Уже долго мучаюсь над проблемойИмеются строки примерно такого формата: registrationNumber:""074-р"" registrationNumber:"074"-р" registrationNumber:""07"4-р"" После двоеточия...
возникла проблема с выравниванием ширины блока по наибольшему в колонкеВот как это выглядит на данный момент:
Ошибка говорит что нельзя присвоить текст к несуществующему объекту, что-то не так с получением данных
Коллеги, прошу помочь, сломал всю голову