vtokmak:
利用状況にあれば古い学校を変換しながら、私は問題に直面していますOptional.ifPresent
。ここでは、コードの以前のバージョンがあります。
State state = State.OK;
final Optional<Person> checkExistingPerson = checkIt();
if(checkExistingPerson.isPresent()) {
Person person = checkExistingPerson.get();
if("blah".equals(person.getName())) {
state = State.DUPLICATE;
} else {
state = State.RESTORED;
}
return Member(person.getId(), state);
}
return Member(null, state);
そして、ここでOptional.ifPresent
の使用
State state = State.OK;
final Optional<Person> checkExistingPerson = checkIt();
checkExistingPerson.ifPresent(person -> {
if("blah".equals(person.getName())) {
state = State.DUPLICATE;
} else {
state = State.NEW;
}
return Member(person.getId(), state);
});
return Member(null, state);
そしてまた、ここではIntelliJのは、私はそれを変更するために強制的にどのようなスクリーンショットです。
使用するための最善のアプローチは何であるOptional
私の問題にについては?THXすべて!
しっかりと激しく非難
- ラムダの内部外部変数はする必要があります
final
。 ifPresent
受け入れConsumer
、それは戻り値はありませんので、したがって、あなたが使用することはできませんreturn Member(person.getId(), state);
(また、あなたがラムダの内側にあることを覚えているのでreturn
、あなたの方法から出口へ行くが、ラムダからされていません)。
map
代わりに受け入れFunction
、戻り値を持っているので、あなたがするのではなく、それを使用することができますifPresent
。
これは、あなたが移動することで、あなたのコードをリファクタリングできる方法であるstate
ラムダの内側で使用してmap
とorElseGet
:
return checkExistingPerson.map(person -> {
State state;
if("blah".equals(person.getName())) {
state = State.DUPLICATE;
} else {
state = State.NEW;
}
return Member(person.getId(), state);
})
.orElseGet(() -> Member(null, State.OK));