В зависимости от того, что должно быть в потоке, может быть проще создать 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)
, но работает.