Referência a métodos com diferentes parâmetros em Java8
Eu estou querendo saber como tudo isso com referências de método e interfaces funcionais funciona em nível inferior. O exemplo mais fácil é onde temos alguma lista
List<String> list = new ArrayList<>();
list.add("b");
list.add("a");
list.add("c"):
Agora queremos classificá-lo com a classe Collections, para que possamos chamar:
Collections.sort(list, String::compareToIgnoreCase);
Mas se definirmos o comparador personalizado, pode ser algo como:
Comparator<String> customComp = new MyCustomOrderComparator<>();
Collections.sort(list, customComp::compare);
O problema é que Collections.sort usa dois parâmetros: List e Comparator. Como o Comparator é uma interface funcional, ele pode ser substituído pela expressão lambda ou referência de método com a mesma assinatura (parâmetros e tipo de retorno). Então, como funciona, podemos passar também uma referência para compareTo, que requer apenas um parâmetro e as assinaturas desses métodos não correspondem? Como as referências de método são traduzidas no Java8?