Ordenar coleções sempre foi
um ponto chave para programação
Por isso boas ferramentas para isso são essenciais
Ordering nos da ferramentas para aplicar diferentes formas
de ordernação de forma poderosa e consistente
Criando um Ordering
Temos 2 formas de criar um Ordering:
Criando uma nova instância e provendo uma implementação para seu método compare
Usando o método Ordering.from que cria um ordering paseado em um Comparator exsitente
Casos eSpecificos
Quer usar null no valor de um MAP?
Deixe-o fora das entradas.
Sempre matenha separado o conjunto com valores não-null.
O melhor a ser feito é separar os casos onde há chaves desse tipo e
pensar melhor em qual o sentido das chaves null no ponto de vista
da sua aplicação.
Dia-a-DIA
Há muitos casos onde o programador usa nulo:
-Onde deveria haver um valor, mas não há.
- Valor não foi encontrado em uma consulta.
Optionals
Optionals são a forma de substituir uma referência nula de um objeto de um tipo específico por uma referencia não-nula.
O Optional pode conter uma referência não-nula
(Nesse caso dizemos que a referencia está present)
Ou uma referência nula
(Nesse caso dizemos que a referencia está absent)
Criando Optionals
Optional.of(T)
Cria um Optional de uma referência não-nula ou falha rapidamente.
Optional.abset()
Retorna absent do Optional de algum tipo (T)
Optional.fromNullable(T)
Cria uma referência Optional com um valor possivelmente nulo.
não-nulos -> present | nulos - > absent
query Methods
isPresent()
True se o optional contiver uma referencia não-nula.
get()
Retorna a instancia de T armazenada, essa referencia deve ser não-nula ou lançará IlegalStateException.
or(T)
Retorna o valor presente na instancia. Caso valor não esteja presente o valor default é retornado.
orNull()
Retorna o valor presente na instancia. Caso valor não esteja presente o valor null é retornado.
Query Methods
Existem mais métodos úteis na API Optional.
Consulte o JavaDoc para maiores informações.
QUal é o ponto?
Por um lado ganhamos a vantagem de conseguir nomear um valor nulo com a API Optional, mas a maior vantagem é ser a prova de idiotas.
Você é forçado a pensar nos casos de absent, pois você
constantemente terá que fazer um unwrap do seu Optional para endereçar os casos de nulo.
Usar nulls facilmente torna-se algo não memorizavel.
Citações
"Null sucks" - Doug Lea
(Java Concurrency API)
"I call it my billion-dollar mistake" - C.A.R. Hoare
(Inventor da referência nula)