Java 8 Comparator nullsPrimeiro naturalOrder confused

essa pode ser uma pergunta simples, mas eu gostaria de entender claramente ...

Eu tenho um 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+'}';}    
 }

E estou testando 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);                           
}

Isso mostra os seguintes 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}

Esses resultados estão corretos comigo, mas tenho um problema de compreensão.

Quando eu ignoro onew Persona(5,null) objeto e passo o comparador:

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

Ele funciona como um encanto. Minha classificação é pornatural order of name property. O problema surge quando adiciono o objeto comname=null, Pensei que precisaria do meu comparador assim.

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

Meu pensamento foierrôneo: "OK, quando o nome é não nulo, eles são classificados emnatural order of name, assim como o comparador anterior, e se foremnull eles serão os primeirosmas meus nomes não nulos ainda serão classificados em ordem natural"

Mas o código certo é este:

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

Eu não entendo o parâmetro paranullsFirst. Eu apenas pensei que onatural order of name explicitamente [padrão] até manipulanull valores.

Mas os documentos dizem:

Retorna um comparador amigável para nulos que consideranull ser menor que não nulo. Quando ambos sãonull, eles são considerados iguais. Se ambos forem não nulos, o valor especificadoComparator é usado para determinar a ordem. Se o comparador especificado fornull, o comparador retornado considera que todos os valores não nulos são iguais.

Esta linha: "Se ambos forem não nulos, o valor especificadoComparator é usado para determinar a ordem ".

Estou confuso quando e como a ordem natural deve ser explicitamente definida ou quando são inferidas.

questionAnswers(3)

yourAnswerToTheQuestion