首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Java 8创建无限流

如何使用Java 8创建无限流
EN

Stack Overflow用户
提问于 2014-03-18 23:16:31
回答 2查看 24.8K关注 0票数 71

有没有一种简单的方法可以不用外部库就用java-8创建一个无限大的流?

例如在Scala中:

代码语言:javascript
复制
Iterator.iterate(0)(_ + 2)
EN

回答 2

Stack Overflow用户

发布于 2014-03-18 23:34:01

下面是一个示例:

代码语言:javascript
复制
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个元素,请执行以下操作:

代码语言:javascript
复制
stream.limit(10).forEach(System.out::println);

当然,您也可以转换元素,就像在Scala示例中所做的那样:

代码语言:javascript
复制
IntStream plusTwoStream = stream.map(n -> n + 2);

请注意,有内置的无限大的流,比如java.util.Random.ints(),它为您提供随机整数的无限大的流。

票数 7
EN

Stack Overflow用户

发布于 2015-09-22 01:23:22

您可以通过实现流和消费者来构建自己的InfiniteStream,并将两者组合在一起,并且可能需要将数据排队,如下所示:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22483554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档