Đôi khi tôi thấy mình trong tình huống có số Stream[X]
và function X => Future Y
, tôi muốn kết hợp với một số Future[Stream[Y]]
và dường như tôi không tìm được cách nào để làm điều đó. Ví dụ, tôi cólập bản đồ Luồng có chức năng trả về Tương lai
val x = (1 until 10).toStream
def toFutureString(value : Integer) = Future(value toString)
val result : Future[Stream[String]] = ???
tôi đã cố gắng
val result = Future.Traverse(x, toFutureString)
mang đến cho kết quả chính xác, nhưng dường như tiêu thụ toàn bộ dòng trước khi trở về tương lai, trong đó nhiều hay thất bại ít purpse
Tôi đã thử
val result = x.flatMap(toFutureString)
nhưng không biên dịch với type mismatch; found : scala.concurrent.Future[String] required: scala.collection.GenTraversableOnce[?]
val result = x.map(toFutureString)
trả về hơi kỳ quặc và vô dụng Stream[Future[String]]
Tôi nên làm gì đây để có được những thứ cố định?
Chỉnh sửa: Tôi không bị mắc kẹt trên một Stream
, tôi muốn được bình đẳng hạnh phúc với những hoạt động tương tự trên một Iterator
, miễn là nó sẽ không chặn trên đánh giá tất cả các mặt hàng trước khi bắt đầu để xử lý người đứng đầu
Chỉnh sửa2: Tôi không chắc chắn 100% rằng Future.Traverse xây dựng cần phải đi qua toàn bộ dòng trước khi trở về một [Stream] tương lai, nhưng tôi nghĩ rằng nó. Nếu không, đó là một câu trả lời tốt trong chính nó.
Chỉnh sửa3: Tôi cũng không cần kết quả theo thứ tự, tôi ổn với luồng hoặc trình lặp được trả lại là thứ tự bất kỳ.
Lưu ý rằng tôi đã gửi [một vấn đề] (https://issues.scala-lang.org/browse/SI-7718) để theo dõi câu trả lời của tôi bên dưới. –
ah, tuyệt vời @TravisBrown. Tôi muốn làm điều đó bản thân mình, nhưng tôi không thể tìm thấy một cách để đăng nhập vào Jira – Martijn
Một chút không rõ ràng - bạn muốn tránh áp dụng "toFutureString" cho tất cả các yếu tố trong bộ sưu tập trước ...? Dường như không có nhiều chi phí để tạo ra một tương lai. Nếu các mục còn lại trong "danh sách" là các khối, điều gì sẽ kích hoạt đánh giá của họ? Hoàn thành tương lai trước đó trong danh sách? Tất cả các hoạt động tuần tự/truyền tải mà tôi có thể tìm thấy trong Scala dường như nghiêm ngặt đối với các yếu tố danh sách riêng lẻ. – pdxleif