Jan*_*sky 7 java java-8 java-stream
是否存在与以下内容等效的流
List<Integer> ints;
while (!(ints = this.nextInts()).isEmpty()) {
// do work
}
Run Code Online (Sandbox Code Playgroud)
首先,感谢@OlivierGrégoire的评论.它改变了我对新知识的回答.
编写您自己Spliterator的未知大小nextInts,然后您可以使用StreamSupport#stream创建流nextInts.例如:
generateUntil(this::nextInts, List::isEmpty).forEach(list -> {
//do works
});
import static java.util.stream.StreamSupport.stream;
<T> Stream<T> generateUntil(final Supplier<T> generator, Predicate<T> stop) {
long unknownSize = Long.MAX_VALUE;
return stream(new AbstractSpliterator<T>(unknownSize, Spliterator.ORDERED) {
@Override
public boolean tryAdvance(Consumer<? super T> action) {
T value = generator.get();
if (stop.test(value)) {
return false;
}
action.accept(value);
return true;
}
}, false);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |