Javaコードから呼び出す必要があるScala関数foo(bs : Stream[Bar]) : Bat
があります。 Javaで "bs" Stream(Stream[Bar]
)を作成し、そのBarオブジェクトを遅延生成するにはどうすればよいですか?JavaでScalaストリームをインスタンス化して取り込む方法は?
答えて
ストリームにする必要が内容に応じて、それはjava.util.Iterator
を作成し、scala.collection.Iterator
経由Stream
にこれを変換する最も簡単かもしれません:
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
オブジェクトコンパニオンで利用できるファクトリの1つを使用するのが最善の方法です。それらの中で最も有用なものは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はあまりにもあります:
- 1. JNIにデータを設定してJavaに取り込む方法
- 2. Javaで1.7百万レコードを取り込む方法は?
- 3. Javaでコレクションを取り込む方法は?
- 4. Java 8ストリーム:HashMapの値を使用してインスタンス化されたオブジェクトのリストを埋め込む
- 5. Rcallerを使用してJavaからRにデータベーステーブルを取り込む方法は?
- 6. Javaオーディオビジュアライザー - リアルタイムサウンド出力をスピーカーに取り込む方法は?
- 7. StringTokenizerの結果をJavaのArrayListに取り込む方法は?
- 8. Java:サブクラスに変数を取り込む方法は?
- 9. ウェブページにログインしてJavaアプリケーションにデータを取り込む方法は?
- 10. アンドロイドアプリケーションパッケージを取り込む方法は?
- 11. firebaseデータを取り込む方法は?
- 12. オーディオをC++で取り込む方法
- 13. Scalaでstdoutをストリームする方法は?
- 14. Javaでリフレクションして内部クラスをインスタンス化する方法は?
- 15. コンテンツを文字列として取り込む方法は?
- 16. Javaで配列を取り込む
- 17. Netezzaで列を行として取り込む方法
- 18. パッケージの.javaファイルをEclipseプロジェクトに取り込む方法
- 19. JavaアプリケーションからBigQueryにデータを取り込む方法
- 20. JavaのmongoDBにストリームを書き込む
- 21. Javaで型をインスタンス化する方法
- 22. djangoオブジェクトをインスタンス化して値を取り込むことは可能ですか?
- 23. データを取り込む方法
- 24. ParamConverterをサービスに取り込む方法
- 25. .NETストリームをバッファなしで同時に2つのストリームに書き込む方法はありますか?
- 26. AndroidではサムネイルでオーディオファイルをListViewに取り込む方法は?
- 27. データを解析して配列を取り込む方法
- 28. アコーディオンを含むJekyllでyamlをnavに取り込む方法
- 29. スライドで制限を与えてデータを取り込む方法
- 30. ScalaシェルでStreamExecutionEnvironmentをインスタンス化します
そのストリームが来るんhttp://functionaljava.googlecode.com/svn/artifacts/3.0/javadoc/fj/data/Stream.html?あなたはJava Collectionでそれを持っていますか、イベントを通してそれを取得しますか?それを知らずに、それについての最良の方法を主張することは不可能です。 –
私の現実の問題では、私はJava Vectorを持っています。私は、イベントから生成されたものを何か/何故違うのかということを理解することに興味があります。 –
あなたの問題のために@Travisの答えは行く方法です。イベントからの生成はより困難です。良い例はScalaのsys.processライブラリで、実行中のプロセスの 'OutputStream'から' Stream'を生成することができます。 –