对于一件作业,我必须设置一个变量。给我的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”的行。 谢谢。
答案 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
)时使用菱形<>
运算符,这样您的代码就会更简洁。