Referencia a métodos con diferentes parámetros en Java8

Me pregunto cómo funciona todo esto con referencias de métodos e interfaces funcionales en el nivel inferior. El ejemplo más fácil es donde tenemos algo de Lista

List<String> list = new ArrayList<>();
list.add("b");
list.add("a");
list.add("c"):

Ahora queremos ordenarlo con la clase Colecciones, para que podamos llamar a:

Collections.sort(list, String::compareToIgnoreCase);

Pero si definimos un comparador personalizado, podría ser algo como:

Comparator<String> customComp = new MyCustomOrderComparator<>();
Collections.sort(list, customComp::compare);

El problema es que Collections.sort toma dos parámetros: Lista y Comparador. Dado que Comparator es una interfaz funcional, se puede reemplazar con expresión lambda o referencia de método con la misma firma (parámetros y tipo de retorno). Entonces, ¿cómo funciona que podamos pasar también la referencia a compareTo que toma solo un parámetro y las firmas de estos métodos no coinciden? ¿Cómo se traducen las referencias de método en Java8?

Respuestas a la pregunta(1)

Su respuesta a la pregunta