我有一個需要從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。 –