首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Optional.isPresent() + Optional.get ()重构为Optional.ifPresent()?

如何将Optional.isPresent() + Optional.get ()重构为Optional.ifPresent()?
EN

Stack Overflow用户
提问于 2017-01-11 11:16:38
回答 1查看 954关注 0票数 1

我有个密码:

代码语言:javascript
复制
public interface A{
    default Optional<MyClass> getMyClass() { 
        return Optional.empty(); 
    }

    default boolean isPresent(){ 
        return getMyClass().isPresent();
    }
}

public enum MyEnum implements A{
    private MyClass someObject;

    MyEnum(MyClass someObject) {
        this.someObject = someObject;
    }

    //...
    @Override
    public Optional<MyClass> getMyClass() {
        return Optional.ofNullable(someObject);
    }
}

我想将这段代码转换为类似于Optional.ifPresent()的代码。我需要这个,而不是现在的Optional.isPresent + Optional.get

我试着做一些类似于Optional.ofNullable(someObject).ifPresent()的事情,但是我不知道在ifPresent()参数中放置什么才能得到与上面代码相同的结果。

编辑:

从注释中我了解到,解决方案是在使用接口的类中将if(something.isPresent()){ //do something }更改为something.getMyClass().ifPresent(val -> //do something);

EN

回答 1

Stack Overflow用户

发布于 2017-01-12 06:06:38

分配器,

案例1

代码语言:javascript
复制
if(something.isPresent())
{ 
    //do something 
}

在这个块中,您可以使用非最终变量,例如:

代码语言:javascript
复制
String myString = null;
if(something.isPresent())
{ 
    myString = "Hello";
}

案例2

代码语言:javascript
复制
something.getMyClass().ifPresent(val -> //do something);

在这个块中,不能使用非最终变量,例如:

代码语言:javascript
复制
String myString = null;
something.getMyClass().ifPresent(val -> myString = "Hello"); // does not work

要修复它,需要使用一个元素列表:

代码语言:javascript
复制
final String myString[] = {""};
something.getMyClass().ifPresent(val -> myString[0] = "Hello"); // will work

如果您有最终对象,那么可以调用它的方法来修改它:

代码语言:javascript
复制
final SomeClass object = new SomeClass();
something.getMyClass().ifPresent(val -> object.someMethod()); // will work

此外,还可以使用方法引用:

代码语言:javascript
复制
class SomeClass {

    // ... 

    public void calculate(MyClass value) {
        // do something
    }

    public void someMethod() {
        something.getMyClass().ifPresent(this::calculate);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41589466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档