私はこのようなものを作ろうとしています:
private String getStringIfObjectIsPresent(Optional<Object> object){
object.ifPresent(() ->{
String result = "result";
//some logic with result and return it
return result;
}).orElseThrow(MyCustomException::new);
}
IfPresentはコンシューマー機能インターフェイスをvoid accept(T t)を持つパラメーターとして使用するため、これは機能しません。値を返すことはできません。他の方法はありますか?
実際に検索しているのは: Optional.map です。コードは次のようになります。
object.map(o -> "result" /* or your function */)
.orElseThrow(MyCustomException::new);
可能であれば、Optional
を渡すことを避けたいと思います。最終的に、ここでOptional
を使用しても何も得られません。少し他のバリアント:
public String getString(Object yourObject) {
if (Objects.isNull(yourObject)) { // or use requireNonNull instead if NullPointerException suffices
throw new MyCustomException();
}
String result = ...
// your string mapping function
return result;
}
別の呼び出しのためにOptional
-オブジェクトを既に持っている場合、単一の理由で、map
などの代わりにisPresent
- methodを使用することをお勧めします。より読みやすくなります(明らかに主観的な決定です;-))。
値が利用可能であることを確認した後、マッピングを好む
private String getStringIfObjectIsPresent(Optional<Object> object) {
Object ob = object.orElseThrow(MyCustomException::new);
// do your mapping with ob
String result = your-map-function(ob);
return result;
}
または1つのライナー
private String getStringIfObjectIsPresent(Optional<Object> object) {
return your-map-function(object.orElseThrow(MyCustomException::new));
}
代わりにmap
-関数を使用してください。オプション内の値を変換します。
このような:
private String getStringIfObjectIsPresent(Optional<Object> object) {
return object.map(() -> {
String result = "result";
//some logic with result and return it
return result;
}).orElseThrow(MyCustomException::new);
}
ここに2つのオプション:
ifPresent
をmap
に置き換え、Function
の代わりにConsumer
を使用します
private String getStringIfObjectIsPresent(Optional<Object> object) {
return object
.map(obj -> {
String result = "result";
//some logic with result and return it
return result;
})
.orElseThrow(MyCustomException::new);
}
isPresent
を使用します。
private String getStringIfObjectIsPresent(Optional<Object> object) {
if (object.isPresent()) {
String result = "result";
//some logic with result and return it
return result;
} else {
throw new MyCustomException();
}
}