Optional
Java 8 では、オブジェクトが存在する場合はオブジェクトに対して何かを実行し、存在しない場合は別の処理を実行したいと考えています。
if (opt.isPresent()) {
System.out.println("found");
} else {
System.out.println("Not found");
}
ただし、これは「機能的なスタイル」ではありません。
Optional
メソッドがありますifPresent()
が、メソッドを連鎖できませんorElse()
。
したがって、次のように書くことはできません。
opt.ifPresent( x -> System.out.println("found " + x))
.orElse( System.out.println("NOT FOUND"));
Optional.map()
@assylias への返信ですが、次の場合には機能しないと思います。
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;
});
この場合、opt
が存在する場合は、そのプロパティを更新してデータベースに保存します。 が利用できない場合は、新しい を作成してobj
データベースに保存します。
2 つのラムダで を返す必要があることに注意してくださいnull
。
しかし、opt
が存在する場合、両方のラムダが実行されます。obj
が更新され、新しいオブジェクトがデータベースに保存されます。 これは、return null
最初のラムダの のためです。 そしてorElseGet()
は実行を続けます。
ベストアンサー1
Java 9以降を使用している場合は、ifPresentOrElse()
方法:
opt.ifPresentOrElse(
value -> System.out.println("Found: " + value),
() -> System.out.println("Not found")
);