sort example ejemplo comparing java java-8 comparator

example - sort list java 8



Comparador de mapeo nulo-seguro usando implementaciones predeterminadas (1)

Encontró una posible solución:

Comparator.comparing(ToSort::getSortBy, Comparator.nullsFirst(Comparator.naturalOrder()) )

¿Existe la posibilidad de crear un comparador de mapeo nulo seguro en Java 8 sin escribir una implementación propia de Comparator ?

Al ejecutar el siguiente código, genera un NPE porque el argumento keyExtractor de Comparator.comparing() puede devolver un valor null :

public class ToSort { private String sortBy; public ToSort(String sortBy) { this.sortBy = sortBy; } public String getSortBy() { return sortBy; } public static void main(String[] args) { // mapping comparator Comparator<ToSort> comp = Comparator.comparing(ToSort::getSortBy); SortedSet<ToSort> set = new TreeSet<>(comp); ToSort o1 = new ToSort("1"); ToSort o2 = new ToSort(null); set.add(o1); System.out.println(set.contains(o2)); //NPE because o2.getSortBy() == null } }

Excepción en el hilo "main" java.lang.NullPointerException en java.util.Comparator.lambda $ comparando $ 77a9974f $ 1 (Comparator.java:469) en java.util.Comparator $$ Lambda $ 2 / 1480010240.compare (Fuente Desconocida) en java.util.Comparators $ NullComparator.compare (Comparators.java:83) en java.util.TreeMap.getEntryUsingComparator (TreeMap.java:376) en java.util.TreeMap.getEntry (TreeMap.java:345) en java.util .TreeMap.containsKey (TreeMap.java:232) en java.util.TreeSet.contains (TreeSet.java:234) en test.ToSort.main (ToSort.java:48)

Utilizando

Comparator<ToSort> comp = Comparator.nullsFirst(Comparator.comparing(ToSort::getSortBy));

tampoco funciona, ya que solo los objetos ToSort que son null se procesan correctamente.

Sé cómo escribir mi propia implementación de Comparator , solo estoy buscando una solución más "elegante" como

Comparator.comparingNullsFirst(ToSort::getSortBy)