mercoledì 12 giugno 2019

Java get or else get


Quando si ha una lista in mano in Java 1.8 lo stream e' uno strumento molto potente, puo' essere usato per un fracco di cose tra cui la trasformazione della lista in qualcos'altro. Per evitare al programmatroto una .get(0) per prendere il primo (o uno qualsiasi) della lista sempre lo stream ti viene incontro con i metodi findFirst e findAny. La differenza? Il primo ti garantisce che l'elemento sia sempre quello.

Ovviamente suddetti metodi restituisco un Optional - a questo punto avete un po' di possibilita' davanti:

  1. Ve ne battete allegramente e fate la get che c'e' c'e' (non devo dirvi perche' non e' una buona idea)
  2. Fate un ifPresent e nel caso fate la get ma son righe in piu' di codice. Che scherzi?
  3. Invocate uno dei due metodi che sono l'oggetto di questo post

Qual'e' la differenza? orElse restituisce direttamente l'oggetto passato come parametro. Quindi potete tranquillamente passare null. orElseGet (come dice il nome) fa la get su quello che gli passate (quindi dev'essere un Supplier) e non devo dirvi (di nuovo) perche' non e' una buona idea passare null.

Se invece volete lanciare un'eccezione c'e' orElseThrow




Se non sapete cosa c'incastri l'immagine con il post andatevi a cercare cosa vuol dire "stream" in Inglese