GUAVA
Ordering
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
Reverse Sorting
CODE
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)
Ordering
By Alex Rios
Ordering
- 172