Java可选“while not null”等效

时间:2018-02-07 14:32:15

标签: java optional

让我们假设我们从这段代码开始

while ((element = getNextElement()) != null) {
   // do something
}

并希望重写它,以便getNextElement()返回Optional,而不是null

这样做的首选方法是什么?像

这样的东西
while ((element = getNextElement()) && element.isPresent()) {

}

...还是有更好的方法?

还有

for (Optional<ElementType> element = getNextElement(); element.isPresent(); element = getNextElement()) {
   // do something
}

是否还有其他/更好的选择(双关语,我猜)?

1 个答案:

答案 0 :(得分:2)

Stream.generate(this::getNextElement) ...

以上将生成Stream<Optional<Element>>。我相信在java 9中存在flatMap可能性。

目前:

Stream.generate(this::getNextElement)
    .filter(Optional::isPresent)
    .map(Optional::get)
    .forEach(...);