有没有一种简单的方法可以使用没有外部库的java-8创建无限流?
例如在Scala中:
Iterator.iterate(0)(_ + 2)
Run Code Online (Sandbox Code Playgroud)
ski*_*iwi 99
是的,有一个简单的方法:
IntStream.iterate(0, i -> i + 2);
Run Code Online (Sandbox Code Playgroud)
作为用例:
IntStream.iterate(0, i -> i + 2)
.limit(100)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
其中打印出0到198,步长为2.
通用方法是:
Stream.iterate(T seed, UnaryOperator<T> f);
Run Code Online (Sandbox Code Playgroud)
后者在使用中可能更为罕见.
这是一个例子:
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);
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,它有点冗长.要打印此流的前10个元素:
stream.limit(10).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
您可以像在Scala示例中那样转换元素:
IntStream plusTwoStream = stream.map(n -> n + 2);
Run Code Online (Sandbox Code Playgroud)
请注意,有内置的无限流,例如,java.util.Random.ints()
它为您提供无限的随机整数流.
归档时间: |
|
查看次数: |
20782 次 |
最近记录: |