In Java 8, voglio fare qualcosa su un Optional
oggetto se è presente e fare un'altra cosa se non è presente.
if (opt.isPresent()) {
System.out.println("found");
} else {
System.out.println("Not found");
}
Questo non è uno "stile funzionale", comunque.
Optional
ha un ifPresent()
metodo, ma non riesco a concatenare un orElse()
metodo.
Pertanto, non posso scrivere:
opt.ifPresent( x -> System.out.println("found " + x))
.orElse( System.out.println("NOT FOUND"));
In risposta a @assylias, non credo funzioni Optional.map()
per il seguente caso:
opt.map( o -> {
System.out.println("while opt is present...");
o.setProperty(xxx);
dao.update(o);
return null;
}).orElseGet( () -> {
System.out.println("create new obj");
dao.save(new obj);
return null;
});
In questo caso, quando opt
è presente, aggiorno la sua proprietà e salvo nel database. Quando non è disponibile, ne creo uno nuovo obj
e lo salvo nel database.
Nota nei due lambda che devo tornare null
.
Ma quando opt
è presente, verranno eseguiti entrambi i lambda. obj
verrà aggiornato e un nuovo oggetto verrà salvato nel database. Ciò è dovuto return null
alla prima lambda. E orElseGet()
continuerà a essere eseguito.
return null;
con return o;
(entrambi). Tuttavia, ho la netta sensazione che tu stia lavorando nel posto sbagliato. Dovresti lavorare sul sito che l'ha prodotto Optional
. In quel luogo dovrebbe esserci un modo per eseguire l'operazione desiderata senza l'intermedio Optional
.
ifPresent
ciò contraddice questo. Tutti gli altri metodi si riferiscono al valore e non alle azioni.