gpt4 book ai didi

java - 将旧式 if 用法转换为Optional.ifPresent() 时出现问题

转载 作者:行者123 更新时间:2023-12-02 20:46:36 25 4
gpt4 key购买 nike

我在将旧式 if 用法转换为 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 强制我更改它的屏幕截图。 enter image description here

对于我的问题,使用Optional的最佳方法是什么?谢谢大家!

最佳答案

  1. lambda 内部的外部变量必须是 final
  2. ifPresent接受 Consumer所以它没有返回值,因此您不能使用 return Member(person.getId(), state); (另请记住,您位于 lambda 内部,因此 return 不会从您的方法中退出,而是从 lambda 中退出)。

map相反,接受 Function它有一个返回值,因此您可以使用它来代替 ifPresent

这就是重构代码的方法,通过在 lambda 内移动 state 并使用 maporElseGet:

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));

关于java - 将旧式 if 用法转换为Optional.ifPresent() 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52582806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com