我有一個需要從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. 如何在TypeScript中實例化,初始化和填充數組?
- 2. 在Java中使用Options和Scala枚舉實例化案例類
- 3. 如何在模板實例化時在DataTemplate中填充控件?
- 4. 在Ruby中實例化一個類並填充實例變量
- 5. 如何在Scala中實例化Java通用內部類?
- 6. 如何在Scala中填充Wicket @SpringBeans?
- 7. 我如何拆分在Scala中填充選項的案例類
- 8. 如何在實例化時填充字符串數組?
- 9. 填充父實例
- 10. 在哪裏實例化和填充視圖模型?
- 11. 在Scala中填充矢量
- 12. 如何在twitter引導中填充流體行上的填充
- 13. 如何實例化一個formset的字段以預先填充?
- 14. 如何實例化DataReceivedEventArgs或能夠用數據填充它?
- 15. 在代碼中預填充實例(Python)
- 16. 在scala中實例化特徵
- 17. 如何實例化的Java
- 18. 更快的方式來實例化和填充對象陣列
- 19. 在Java中實例化scala.Int
- 20. 從TreeView實例填充TreeView
- 21. scala:抽象類實例化?
- 22. 我如何在Scala中實例化Java 7完成處理程序
- 23. 如何在Clojure中實現自動填充示例?
- 24. 如何在rails中使用鍵填充資源實例?
- 25. 如何在F#中創建類實例並填充屬性?
- 26. 如何在Scala的一個步驟中實例化內部類?
- 27. java代碼中如何實例化?
- 28. Java 8 Stream:填充使用HashMap中的值實例化的對象列表
- 29. 如何在java中填充集合?
- 30. 如何在java中填充多邊形?
這個流從哪裏來?你在Java Collection中擁有它,你會通過事件得到它,什麼?如果不知道這一點,就不可能斷言什麼是最好的方式。 –
在我現實世界的問題中,我有一個Java向量。如果是事件產生,我會對理解什麼/爲什麼會做不同的事情感興趣。 –
對於你的問題@Travis的答案是要走的路。從一個事件生成更加困難 - 一個很好的例子就是Scala的sys.process庫,它可以從正在運行的進程的OutputStream生成一個Stream。 –