tl; dr
Chỉ cần diễn viên , không cần chuyển đổi.
Đúc Stream < String >
để Iterable < String >
.
Chi tiết
THẬN TRỌNG Xem Trả lời của Holger giải thích về sự nguy hiểm của việc sử dụng luồng được hỗ trợ Iterable
.
Vâng, bạn có thể làm cho Iterable
từ một Stream
.
Giải pháp rất đơn giản, nhưng không rõ ràng. Xem bài đăng này trên Câu hỏi thường gặp về Lambda của Maurice Naftalin .
Các iterator()
phương pháp trên BaseStream
(lớp cha của Stream
) trả lại một Iterator
xảy ra trùng với cùng tên của iterator()
phương pháp trả lại một Iterator
theo yêu cầu của Iterable
giao diện. Các chữ ký phương thức phù hợp. Vì vậy, chúng tôi thực sự có thể Stream
chuyển sang một Iterable
, không cần chuyển đổi.
Làm đầu vào của bạn.
String input = "this\n" +
"that\n" +
"the_other";
Stream < String > stream = input.lines() ;
Đúc mà Stream<String>
để Iterable<String>
.
Iterable< String > iterable = ( Iterable < String > ) stream ; // Cast `Stream < String >` to `Iterable < String >`.
Kiểm tra kết quả.
for ( String s : iterable )
{
System.out.println( "s = " + s );
}
Xem mã này chạy trực tiếp tại IdeOne.com .
s = cái này
s = đó
s =
CAVEAT Cẩn thận với rủi ro của luồng được hỗ trợ Iterable
. Giải thích trong câu trả lời đúng của Holger .