Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Metodos References com parametros

Minha dúvida é... Como que eu faço pra usar metódos references com parâmetros? Fui tentar mudar um código meu e não consegui visualizar como eu faria isso. Exemplo:

palavras.sort((s1, s2) -> Integer.compare(s1.length(), s2.length()));

Eu tentei assim, mas não funcionou.

palavras.sort((s1, s2) -> Integer::compare(s1.length(), s2.length()));

Ou eu só consigo com metodos que não recebem parâmetros?

1 resposta
solução!

Oi Jonathan, tudo bom?

Dá pra fazer referência de método em método com parâmetro sim, mas não nessa situação. E, ao usar a referência de método, tiramos a necessidade de usar a expressão em lambda com a -> para aquele método. Explico:

Para o método com parâmetro poder ser usado como referência de método, os parâmetros definidos na sintaxe do lambda devem ser exatamente os parâmetros do método. Por exemplo, se inteiros for uma lista de inteiros, podemos passar a expressão em lambda:

inteiros.sort((i1, i2) -> Integer.compare(i1, i2));

para o uso de referência de método:

inteiros.sort(Integer::compare);

Isso porque os parâmetros i1 e i2 do lambda são exatamente os parâmetros pro método compare.

Na expressão lambda da pergunta,

palavras.sort((s1, s2) -> Integer.compare(s1.length(), s2.length()));

os parâmetros do lambda são s1 e s2, enquanto que os parâmetros do método compare são s1.length() e s2.length(), então não tem como abreviar para usar a referência de método.

Ficou claro? Se ainda não tiver entendido, pergunta de novo aqui. :)

Aqui tem uns links pra saber mais detalhes sobre método de referência e sobre expressão em lambda.