Muchas veces tenemos un iterable y queremos pasarlo a un stream para aprovecharnos de todas las operaciones que nos aporta el API de streams de java. Por desgracia, Iterable
no aporta directamente el método .stream()
. Sin embargo, tenemos una opción sencilla para pasar nuestro iterable a un stream:
public void doOperations(Iterable<String> iterable) {
StreamSupport.stream(iterable.spliterator(), false)
.filter(s -> !s.startsWith("a"))
.map(String::toUpperCase)
.collect(Collectors.toList());
}
Como se puede ver en el ejemplo anterior, a través de la clase StreamSupport
(java.util.stream.StreamSupport
) podemos crear un stream directamente, sin más que usar el splitIterator
que nos proporciona nuestro Iterable
.
Si quisieramos, por ejemplo, pasar de un Iterable
a una List
, bastaría con:
public List<T> iterableToList(Iterable<T> iterable) {
return StreamSupport.stream(iterable.spliterator(), false)
.collect(Collectors.toList());
}