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 Iterable
de 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 Iterator
a coincide com o mesmo nome do iterator()
método retornando a Iterator
conforme exigido pela Iterable
interface. As assinaturas do método correspondem. Então, na verdade, podemos converter Stream
para 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 .