Java Language Carta geografica


Esempio

Utilizza il metodo map() di Optional per lavorare con valori che potrebbero essere null senza fare controlli null espliciti:

(Si noti che le operazioni map() e filter() vengono valutate immediatamente, a differenza delle loro controparti Stream che vengono valutate solo su un'operazione terminale .)

Sintassi:

public <U> Optional<U> map(Function<? super T,? extends U> mapper)

Esempi di codice:

String value = null;

return Optional.ofNullable(value).map(String::toUpperCase).orElse("NONE");
// returns "NONE"
String value = "something";

return Optional.ofNullable(value).map(String::toUpperCase).orElse("NONE");
// returns "SOMETHING"

Poiché Optional.map () restituisce un opzionale vuoto quando la sua funzione di mappatura restituisce null, è possibile concatenare diverse operazioni map () come una forma di dereferenziazione null-safe. Questo è anche noto come concatenamento sicuro .

Considera il seguente esempio:

String value = foo.getBar().getBaz().toString();

Qualsiasi getBar , getBaz e toString possono potenzialmente lanciare una NullPointerException .

Ecco un modo alternativo per ottenere il valore da toString() usando Optional :

String value = Optional.ofNullable(foo)
                       .map(Foo::getBar)
                       .map(Bar::getBaz)
                       .map(Baz::toString)
                       .orElse("");

Ciò restituirà una stringa vuota se una qualsiasi delle funzioni di mapping ha restituito null.

Di seguito è riportato un altro esempio, ma leggermente diverso. Stampa il valore solo se nessuna delle funzioni di mappatura ha restituito nulla.

Optional.ofNullable(foo)
        .map(Foo::getBar)
        .map(Bar::getBaz)
        .map(Baz::toString)
        .ifPresent(System.out::println);