tl; dr
Einfach besetzen , keine Konvertierung nötig.
Besetzung Stream < String >zu Iterable < String >.
Einzelheiten
VORSICHT Siehe Antwort von Holger, in der die Gefahren der Verwendung eines Stream-Backed erläutert werden Iterable.
Ja, du kannst Iterableaus einem machen Stream.
Die Lösung ist einfach, aber nicht offensichtlich. Siehe diesen Beitrag in den Lambda-FAQ von Maurice Naftalin .
Die iterator()Methode zur Rückgabe von a BaseStream(Oberklasse von Stream) Iteratorstimmt zufällig mit demselben Namen der iterator()Methode überein, die a zurückgibt, Iteratorwie von der IterableSchnittstelle gefordert . Die Methodensignaturen stimmen überein. Also haben wir eigentlich die werfen können , Streamum ein Iterable, benötigt keine Konvertierung.
Machen Sie Ihre Eingabe.
String input = "this\n" +
"that\n" +
"the_other";
Stream < String > stream = input.lines() ;
Wirf das Stream<String>auf Iterable<String>.
Iterable< String > iterable = ( Iterable < String > ) stream ; // Cast `Stream < String >` to `Iterable < String >`.
Testen Sie die Ergebnisse.
for ( String s : iterable )
{
System.out.println( "s = " + s );
}
Sehen Sie diesen Code live auf IdeOne.com .
s = das
s = das
s = the_other
CAVEAT Achten Sie auf das Risiko von Stream-Backed Iterable. Erklärt in der richtigen Antwort von Holger .