将老式转换为 Optional.ifPresent() 时出现问题

我在将老式转换为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 强迫我更改它的屏幕截图。

http://img3.mukewang.com/616fbd4a0001d70110280538.jpg

Optional关于我的问题,最好的方法是什么?谢谢!


白衣染霜花
浏览 202回答 3
3回答

呼啦一阵风

您不能从 lambda 表达式中更改局部变量的值。此外,ifPresent不能返回值,因为它的返回类型是void.相反,您应该使用Optional.map,Optional如果它存在,它会转换被包装的对象:return checkExistingPerson&nbsp; &nbsp; .map(person -> new Member(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; person.getId(),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "blah".equals(person.getName()) ? State.DUPLICATE : State.RESTORED))&nbsp; &nbsp; .orElse(new Member(null, State.OK));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java