tl; dr
Basta lançar , não há necessidade de converter.
Transmitir Stream < String >para Iterable < String >.
Detalhes
CUIDADO Consulte Resposta de Holger, explicando os perigos do uso de um fluxo de backup Iterable.
Sim, você pode fazer um Iterablede a Stream.
A solução é simples, mas não óbvia. Veja este post no FAQ Lambda de Maurice Naftalin .
o iterator() método em BaseStream(superclasse de Stream) retornando Iteratora coincide com o mesmo nome do iterator()método retornando a Iteratorconforme exigido pela Iterableinterface. As assinaturas do método correspondem. Então, na verdade, podemos converter Streampara a Iterable, sem necessidade de conversão.
Faça sua entrada.
String input = "this\n" +
"that\n" +
"the_other";
Stream < String > stream = input.lines() ;
Lance isso Stream<String>para Iterable<String>.
Iterable< String > iterable = ( Iterable < String > ) stream ; // Cast `Stream < String >` to `Iterable < String >`.
Teste os resultados.
for ( String s : iterable )
{
System.out.println( "s = " + s );
}
Veja este código executado ao vivo em IdeOne.com .
s = isso
s = isso
s = o_outro
CAVEAT Cuidado com o risco de backup em fluxo Iterable. Explicado no correto resposta de Holger .