发布于 2014-03-18 23:34:01
下面是一个示例:
PrimitiveIterator.OfInt it = new PrimitiveIterator.OfInt() {
private int value = 0;
@Override
public int nextInt() {
return value++;
}
@Override
public boolean hasNext() {
return true;
}
};
Spliterator.OfInt spliterator = Spliterators.spliteratorUnknownSize(it,
Spliterator.DISTINCT | Spliterator.IMMUTABLE |
Spliterator.ORDERED | Spliterator.SORTED);
IntStream stream = StreamSupport.intStream(spliterator, false);
正如您所看到的,它有点冗长。要打印此流的前10个元素,请执行以下操作:
stream.limit(10).forEach(System.out::println);
当然,您也可以转换元素,就像在Scala示例中所做的那样:
IntStream plusTwoStream = stream.map(n -> n + 2);
请注意,有内置的无限大的流,比如java.util.Random.ints()
,它为您提供随机整数的无限大的流。
发布于 2015-09-22 01:23:22
您可以通过实现流和消费者来构建自己的InfiniteStream,并将两者组合在一起,并且可能需要将数据排队,如下所示:
public class InfiniteStream<T> implements Consumer<T>, Stream<T> {
private final Stream<T> stream;
private final Queueing q;
...
public InfiniteStream(int length) {
this.q = new Queueing(this.length);
this.stream = Stream.generate(q);
...
}
//implement stream methods
//implement accept
}
在此处查看完整代码https://gist.github.com/bassemZohdy/e5fdd56de44cea3cd8ff
https://stackoverflow.com/questions/22483554
复制相似问题