Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Dúvida sobre a ordenação

Foi passado o método para a ordenação: palavras.sort(Comparator.comparing(s -> s.length()));

Porém ainda não consegui compreender como o java consegue identificar s -> s.length(), como ele sabe que deve se comparar as duas palavras? Como ele faz para comparar todas as palavras? É feito vários for's nisso?

1 resposta
solução

Oi Matheus,

Simplificadamente, o método .sort() espera um Objeto do tipo Comparator. Esse objeto é construído através do método Comparator.comparing.

Já o método .comparing() espera como parâmetro um objeto Function (objeto novo do Java 8). Esse objeto Function é inferido pelo compilador através do lambda s -> s.length().

Para simplificar, o que o compilador vai fazer é transformar s -> s.length() em:

                    palavras.sort(Comparator.comparing(
            new Function<String, Integer>() {

                @Override
                public Integer apply(String s) {
                    return s.length();
                }

            }
        ));

Para cada elemento da variável palavras será invocado o comparator que por sua vez chama o objeto Function.

Deu para clarear as ideias? Mais importante que entender como é feito, é importante saber como utilizar essa estrutura, não esquenta tanto a cabeça com isso nesse momento, segue com os estudos =)

Abraço!