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

时间:2017-03-18 17:09:43

标签: java arraylist optional data-conversion

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

设定方法:

 public void setParentVertex(IVertex<T> parentVertex)
    {
    if(parentVertex == null)
        this.parentVertex = Optional.empty();
    else
        this.parentVertex = Optional.of(parentVertex);
}

我正在尝试使用它:

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

我一直收到的错误是:“错误:不兼容的类型:可选&gt;无法转换为IVertex”由于我声明变量“parent”的行。 谢谢。

3 个答案:

答案 0 :(得分:3)

这是正确的版本

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

同样重写setParentVertex函数:

也是一件好事
public void setParentVertex(IVertex<T> parentVertex) {
  this.parentVertex = Optional.ofNullable(parentVertex);
}

答案 1 :(得分:1)

如果没有价值,我认为您不必将其添加到列表中。所以就这样做

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

答案 2 :(得分:1)

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

path

或下面显示的短格式使用ArrayList<IVertex<T>> path = new ArrayList<>(); Optional<IVertex<T>> parent = current.getLabel().getParentVertex(); if(parent.isPresent()) { path.add(parent.get()); } 方法:

ifPresent

此外,我建议您查看ArrayList<IVertex<T>> path = new ArrayList<>(); Optional<IVertex<T>> parent = current.getLabel().getParentVertex(); parent.ifPresent(path::add); API方法here

作为旁注,我建议您在声明泛型类型(如上所示,Optional)时使用菱形<>运算符,这样您的代码就会更简洁。