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 Iterable
aus 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
) Iterator
stimmt zufällig mit demselben Namen der iterator()
Methode überein, die a zurückgibt, Iterator
wie von der Iterable
Schnittstelle gefordert . Die Methodensignaturen stimmen überein. Also haben wir eigentlich die werfen können , Stream
um 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 .