设置可选

Set with Optional

我有这个代码:

if (myClass != null){
    myClass2.setId(myClass.getId());
    myClass2.setName(myClass.getName());
    myClass2.setPosition(myClass.getPosition());
}

我想将此代码替换为:

Optional.ofNullable(myClass)

并将此字段从 myClass 映射到 myClass2
我该怎么做?

您是否打算使用:

Optional.ofNullable(myClass)
        .ifPresent(m -> {
            myClass2.setId(m.getId());
            myClass2.setName(m.getName());
            myClass2.setPosition(m.getPosition());
        });

对于映射,我建议阅读有关 MapStruct 的内容,这是一个很好的工具。

如果您只是简单地克隆 myClass 对象,那么您可以像这样在可选对象上使用 map 方法:

public class Test { 
    public static void main(String[] args) {
        MyClass mc = new MyClass(1,"abc");
        
        System.out.println(myClone(Optional.ofNullable(mc)));
        
        mc = null;
        System.out.println(myClone(Optional.ofNullable(mc)));

    }
    
    
    public static Optional<MyClass> myClone(Optional<MyClass> mc) {
        return mc.map(o->new MyClass(o.id(), o.name()));   //<-- do your mapping here
    }
}

record MyClass(int id, String name) {};

输出:

Optional[MyClass[id=1, name=abc]]
Optional.empty

为简单起见,我正在使用记录 MyClass。
ifPresent 方法采用 Consumer function and map method takes Function 函数。