如何在Java中实例化和填充Scala Stream?
我有一个 Scala 函数,我需要从 Java 代码中调用它。如何在Java中创建“bs”流()并懒惰地生成其Bar对象?foo(bs : Stream[Bar]) : Bat
Stream[Bar]
我有一个 Scala 函数,我需要从 Java 代码中调用它。如何在Java中创建“bs”流()并懒惰地生成其Bar对象?foo(bs : Stream[Bar]) : Bat
Stream[Bar]
最好的方法是使用对象伴随上可用的工厂之一。对于其中最有用的,您还需要实现,这可以通过扩展来完成。Stream
Function1
AbstractFunction1
下面是一个示例:
import scala.collection.immutable.Stream;
import scala.runtime.AbstractFunction1;
public class Ex {
public Stream<Integer> stream = Stream.iterate(0, new Increment());
}
class Increment extends AbstractFunction1<Integer, Integer> {
public Integer apply(Integer v1) {
return v1 + 1;
}
}
根据流中需要的内容,最简单的方法是创建一个,然后通过:java.util.Iterator
Stream
scala.collection.Iterator
import scala.collection.JavaConverters;
import scala.collection.immutable.Stream;
...
List<String> list = new ArrayList<String>();
\\ Fill the list somehow...
Iterator<String> it = list.iterator();
Stream<String> stream = JavaConverters.asScalaIteratorConverter(it)
.asScala().toStream();
当然,迭代器不必来自集合-我们可以通过实现自己的迭代器轻松创建无限流:
Stream<String> stream = JavaConverters.asScalaIteratorConverter(
new Iterator<String>() {
int i = 0;
public boolean hasNext() { return true; }
public void remove() { throw new UnsupportedOperationException(); }
public String next() { return Integer.toString(i++); }
}
).asScala().toStream();
它不像 类似的东西那么漂亮,但它有效。Stream.iterate(0)(_ + 1).map(_.toString)