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