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 Iterabletừ 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 Iteratorxảy ra trùng với cùng tên của iterator()phương pháp trả lại một Iteratortheo yêu cầu của Iterablegiao 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ể Streamchuyể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 .