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)
Made with Slides.com