Java-删除";“可选”;从变量(转换)

Java-删除";“可选”;从变量(转换),java,arraylist,optional,data-conversion,Java,Arraylist,Optional,Data Conversion,对于一项作业,我必须设置一个变量。给我的set方法将其转换为“可选”。但是,我必须将此变量存储在不允许可选变量的ArrayList中。如何转换此变量使其不再是可选的 集合方法: public void setParentVertex(IVertex<T> parentVertex) { if(parentVertex == null) this.parentVertex = Optional.empty(); else thi

对于一项作业,我必须设置一个变量。给我的set方法将其转换为“可选”。但是,我必须将此变量存储在不允许可选变量的ArrayList中。如何转换此变量使其不再是可选的

集合方法:

 public void setParentVertex(IVertex<T> parentVertex)
    {
    if(parentVertex == null)
        this.parentVertex = Optional.empty();
    else
        this.parentVertex = Optional.of(parentVertex);
}
public void setParentVertex(IVertex parentVertex)
{
if(parentVertex==null)
this.parentVertex=可选的.empty();
其他的
this.parentVertex=可选的.of(parentVertex);
}
我尝试使用它的地方:

 ArrayList<IVertex<T>> path = new ArrayList<IVertex<T>>();
 IVertex<T> parent = current.getLabel().getParentVertex();
 path.add(parent);
ArrayList path=new ArrayList();
IVertex parent=current.getLabel().getParentVertex();
添加路径(父级);
我一直收到的错误是:“错误:不兼容的类型:可选>无法转换为IVertex”,因为我在其中声明了变量“parent”。
谢谢。

如果没有价值,我想您不必将其添加到列表中。那就这么做吧

if(nameOfOptional.isPresent()){
   list.add(nameOfOptional.get());
}

首先,添加检查以查找值是否存在(通过调用
isPresent()
),然后如果值存在,则添加到
ArrayList
对象,如下所示:

ArrayList<IVertex<T>> path = new ArrayList<>();
Optional<IVertex<T>> parent = current.getLabel().getParentVertex();
if(parent.isPresent()) {
    path.add(parent.get());
}
另外,我建议您看看
可选的
API方法


作为补充说明,我建议您在声明泛型类型时使用菱形
运算符(如上图所示,即
新建ArrayList()
),这样您的代码就不会那么冗长了。

以下是正确的版本

List<IVertex<T>> path = new ArrayList<IVertex<T>>();
current.getLabel().getParentVertex().ifPresent(path::add)

如果可选项为空,列表中应该存储什么?你读过可选的javadoc吗?为什么不使用Optional.ofNullable()?请注意,强烈反对使用可选字段作为字段类型。它应该用作方法的返回类型。@JBNizet恐怕我没有选择它。我刚从我的讲师那里得到了代码,并被告知要使用它。我不知道为什么他选择只使用“可选”,这不应该阻止你阅读文档。阅读后,您应该做的事情应该变得显而易见。您可以像parent.ifPresent(path::add)一样将其缩短;这成功了!谢谢:)我也会记住这一点。
List<IVertex<T>> path = new ArrayList<IVertex<T>>();
current.getLabel().getParentVertex().ifPresent(path::add)
public void setParentVertex(IVertex<T> parentVertex) {
  this.parentVertex = Optional.ofNullable(parentVertex);
}