сравнение и затем сравнение дает ошибку компиляции
Я пытаюсь сортироватьList
сотрудников по имени, то возраст, используя Java8Comparator
Я создал нижеComparator
но это дает мне ошибку компилятора
Type mismatch: cannot convert from Comparator<Object> to <unknown>
Comparator<String> c = Comparator.comparing(s -> s.split("\\s+")[0])
.thenComparingInt(s -> Integer.parseInt(s.split("\\s+")[1])); //compile error
но это работает, если я явно указываю тип
Comparator<String> c = Comparator.<String, String> comparing(s -> s.split("\\s+")[0])
.thenComparingInt(s -> Integer.parseInt(s.split("\\s+")[1])); //works
или создав дваCompartor
с и цепь
Comparator<String> name = Comparator.comparing(s -> s.split("\\s+")[0]);
Comparator<String> age = Comparator.comparingInt(s -> Integer.parseInt(s.split("\\s+")[1]));
Comparator<String> cc = name.thenComparing(age); //works
Я указал типComparator<String>
на левой стороне, но почему автоматический вывод типа не находит правильный тип и ожидает явно указать.
Может кто-то прояснить это?
Вот код
String[] arr = { "alan 25", "mario 30", "alan 19", "mario 25" };
Comparator<String> c = Comparator.<String, String> comparing(s -> s.split("\\s+")[0])
.thenComparingInt(s -> Integer.parseInt(s.split("\\s+")[1]));
List<String> sorted = Arrays.stream(arr).sorted(c).collect(Collectors.toList());
System.out.println(sorted);
выход
[alan 19, alan 25, mario 25, mario 30]