In Java 8, voglio fare qualcosa su un Optionaloggetto 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.
Optionalha 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 obje lo salvo nel database.
Nota nei due lambda che devo tornare null.
Ma quando optè presente, verranno eseguiti entrambi i lambda. objverrà aggiornato e un nuovo oggetto verrà salvato nel database. Ciò è dovuto return nullalla 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.
ifPresentciò contraddice questo. Tutti gli altri metodi si riferiscono al valore e non alle azioni.