Java 8 Comparator nulls Primero natural Orden confundido

Esta puede ser una pregunta simple, pero me gustaría entenderla claramente ...

Tengo un código como este:

public final class Persona
{
   private final int id;
   private final String name
   public Persona(final int id,final String name)
   {
       this.id = id;
       this.name = name;
   }
   public int getId(){return id;}    
   public String getName(){return name;}     
   @Override
   public String toString(){return "Persona{" + "id=" + id + ", name=" + name+'}';}    
 }

Y estoy probando este código:

import static java.util.Comparator.*;
private void nullsFirstTesting()
{               
    final Comparator<Persona>comparator = comparing(Persona::getName,nullsFirst(naturalOrder()));
    final List<Persona>persons = Arrays.asList(new Persona(1,"Cristian"),new Persona(2,"Guadalupe"),new Persona(3,"Cristina"),new Persona(4,"Chinga"),new Persona(5,null));
    persons
            .stream()
            .sorted(comparator)
            .forEach(System.out::println);                           
}

Esto muestra los siguientes resultados:

Persona{id=5, name=null}
Persona{id=4, name=Chinga}
Persona{id=1, name=Cristian}
Persona{id=3, name=Cristina}
Persona{id=2, name=Guadalupe}

Estos resultados están bien conmigo pero tengo un problema de comprensión.

Cuando ignoro elnew Persona(5,null) objeto y paso el comparador:

final Comparator<Persona>comparator = comparing(Persona::getName);

Funciona a las mil maravillas. Mi clasificación es pornatural order of name property. El problema surge cuando agrego el objeto conname=null, Solo pensé que necesitaría mi comparador así.

final Comparator<Persona>comparator = comparing(Persona::getName,nullsFirst());

Mi pensamiento eraerróneo: "OK, cuando el nombre no es nulo, se ordenan ennatural order of name, al igual que el comparador anterior, y si sonnull ellos serán los primerospero mis nombres no nulos aún se ordenarán en orden natural".

Pero el código correcto es este:

final Comparator<Persona>comparator = comparing(Persona::getName,nullsFirst(naturalOrder()));

No entiendo el parámetro paranullsFirst. Solo pensé que elnatural order of name explícitamente [por defecto] incluso manejarnull valores.

Pero los documentos dicen:

Devuelve un comparador nulo que consideranull ser menos que no nulo. Cuando ambos sonnull, se consideran iguales. Si ambos no son nulos, el especificadoComparator se usa para determinar el orden. Si el comparador especificado esnull, el comparador devuelto considera que todos los valores no nulos son iguales.

Esta línea: "Si ambos no son nulos, el especificadoComparator se utiliza para determinar el orden ".

Estoy confundido sobre cuándo y cómo se debe establecer explícitamente el orden natural o cuándo se infieren.

Respuestas a la pregunta(3)

Su respuesta a la pregunta