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.