Даже не знаю, вопрос ли это. Сам вроде разобрался, в чем дело. Но вопрос: валидатор и в других задачах лябмда-выражения будет считать за метод?
Сделал задание, все тесты проходит, кроме одного: "Класс Solution должен содержать три метода."
Считаем: main, sort, isGreaterThan - 3 штуки. Непонятно. Формально, решение соответсвует условияю.
Читаю Хорстманна, дошел до лямбда-функций и функциональных интерфейсов. Классный мужик, сразу объясняет что и как работает, без магии.
И закралось сомнение, что вызов (o1, o2) -> isGreaterThan(o1, o2) ? 1 : -1 как-то гадит в скомпилированный класс.
Полез искать, чем посмотреть байт-код Java, нашел JByteMod.
Он-то и показал, что в классе появился несанционированный метод "lambda$sort$0"
Вопрос, кто решал задачи позже: Это так и задумано, что валидатор считает автосозданные методы? В других задачах это используется?
Или это косяк валидатора и ему не стоило бы считать методы с $?
package com.javarush.task.task08.task0830;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
/*
Задача по алгоритмам
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] array = new String[20];
for (int i = 0; i < array.length; i++) {
array[i] = reader.readLine();
}
sort(array);
for (String x : array) {
System.out.println(x);
}
}
public static void sort(String[] array) {
Arrays.sort(array, (o1, o2) -> isGreaterThan(o1, o2) ? 1 : -1);
}
//Метод для сравнения строк: 'а' больше чем 'b'
public static boolean isGreaterThan(String a, String b) {
return a.compareTo(b) > 0;
}
}