我有一个需要从Java代码调用的Scala函数foo(bs : Stream[Bar]) : Bat
。如何在Java中创建“bs”流(Stream[Bar]
)并延迟生成其Bar对象?如何在Java中实例化和填充Scala流?
回答
根据什么需要是在流,这可能是最简单的创建一个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)
那样漂亮,但它的工作原理。
非常容易使用。谢谢! –
你试过
scala.collection.immutable.Stream bs = new scala.collection.immutable.Stream()
?
我已经编辑了这个问题,试图说清楚我正在寻找一个基于Java的Stream生成的完整示例(不仅仅是实例化) –
最好的方法是使用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;
}
}
我接受了@Travis的答案,因为它是我的特定问题的最简单答案,但是这个答案对于更一般的情况非常有用。 –
我知道你在寻找scala流,但也有功能性的java:http://functionaljava.googlecode.com/svn/artifacts/3.0/javadoc/fj/data/Stream.html
- 1. 在Ruby中实例化一个类并填充实例变量
- 2. 如何在实例化时填充字符串数组?
- 3. 填充父实例
- 4. 在Scala中填充矢量
- 5. 如何实例化DataReceivedEventArgs或能够用数据填充它?
- 6. 如何实例化一个formset的字段以预先填充?
- 7. 如何实例化的Java
- 8. 接口生成器:实例化和填充数组/集合?
- 9. 在Java中实例化scala.Int
- 10. 从TreeView实例填充TreeView
- 11. scala:抽象类实例化?
- 12. 如何在Clojure中实现自动填充示例?
- 13. 如何在F#中创建类实例并填充属性?
- 14. java代码中如何实例化?
- 15. Java 8 Stream:填充使用HashMap中的值实例化的对象列表
- 16. 如何在Java中填充数组?
- 17. 如何在java中填充多边形?
- 18. Java实例化
- 19. scala 2.11.8如何填充数组
- 20. 在Apache Spark Scala中,如何从CSV中填充DataFrame中的Vectors.dense?
- 21. 在BPEL流程中实例化类
- 22. 如何从Scala代码实时填充java.util.HashMap?
- 23. 填充在Java
- 24. 如何将java流转换为scala流?
- 25. 在Scala中填充矢量的两端
- 26. Java:如何用128位的CFB和无填充实现AES
- 27. 如何实例化scala中的collection.mutable.Map [String,Any]?
- 28. 如何在Scala中打印填充矩形?
- 29. Scala清单和实例
- 30. 在JAVA中填充jTable
这个流从哪里来?你在Java Collection中拥有它,你会通过事件得到它,什么?如果不知道这一点,就不可能断言什么是最好的方式。 –
在我现实世界的问题中,我有一个Java向量。如果是事件产生,我会对理解什么/为什么会做不同的事情感兴趣。 –
对于你的问题@Travis的答案是要走的路。从一个事件生成更加困难 - 一个很好的例子就是Scala的sys.process库,它可以从正在运行的进程的OutputStream生成一个Stream。 –