Tentativa de usar o Comparator para classificar por nome, ignorar maiúsculas e minúsculas e nulos primeiro
Estou tendo problemas ao usar a classe Java 8 Comparator para classificar uma lista de itens.
Meu atual comparador de trabalho está abaixo:
comparator = Comparator.comparing(Person::getName, Comparator.nullsFirst(Comparator.naturalOrder()));
Isso funciona: ele ordena a lista pelo nome com os valores nulos primeiro. No entanto, agora estou tentando ignorar o caso dos nomes.
Eu sei que posso escrever um novo getter que retorne o nome em minúsculas, mas não quero seguir essa abordagem, pois preciso fazer isso para vários atributos.
Procurando on-line, parece que eu deveria estar usandoString.CASE_INSENSITIVE_ORDER
, mas os únicos exemplos que vejo não incluem a especificação de pedido nulo.
Eu posso fazer algo assim:
comparator = Comparator.comparing(Person::getName, String.CASE_INSENSITIVE_ORDER);
No entanto, sempre que tento incluir oComparator.nullsFirst
Acabo recebendo erros de digitação e estou confuso sobre como continuar.
Eu tentei fazer uma cadeia semelhante a
thenComparing(Comparator.nullsFirst(Comparator.naturalOrder))
mas isso também não funciona.
Alguém poderia me dar alguns conselhos sobre como eu posso agrupá-los para classificar por nome (sem distinção entre maiúsculas e minúsculas) e depois solicitar os valores nulos. Eu pareço estar me confundindo com os tipos.