Comparando e thenComparing fornece erro de compilação
Estou tentando classificarList
de funcionários por nome e idade usando Java8Comparator
, Eu criei abaixoComparator
mas isso me dá um erro de compilador
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
mas funciona se eu especificar explicitamente o Type
Comparator<String> c = Comparator.<String, String> comparing(s -> s.split("\\s+")[0])
.thenComparingInt(s -> Integer.parseInt(s.split("\\s+")[1])); //works
ou criando doisCompartor
se corrente
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
Eu especifiquei o tipoComparator<String>
no lado esquerdo, mas por que a inferência automática de tipo não está encontrando o tipo correto e espera especificar explicitamente.
Alguém poderia esclarecer isso?
Aqui está o código
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);
resultado
[alan 19, alan 25, mario 25, mario 30]