adam bien's blog

Converting an Iterator or Spliterator into a Stream 📎

The useful utility class: StreamSupport converts Spliterator into a Stream.

Also an java.util.Iterator could be easily converted into a Spliterator using the Spliterators utility.

Particularly interesting is the combination with Java EE. An interface Greeter:


public interface Greeter {
    String getMessage();
}

Can be injected as an Instance, which implements the Iterable interface. This allows the conversion into a stream:

public class GreeterExposer {

    @Inject
    Instance<Greeter> greeter;

    @Produces
    public Stream<Greeter> expose() {
        return StreamSupport.stream(greeter.spliterator(), false);
    }

}

A Stream greatly simplifies the direct access and transformation to the contents. The output of all realizations of this interface could be easily joined into a single String:

@Stateless
public class GreetingsService {

    @Inject
    Stream<Greeter> greaters;

    public String allGreetings() {
        return greaters.
        map(g -> g.getMessage()).
        collect(Collectors.joining(","));
    }

}

Three concrete Greeting classes would output something like: "a bad day,leave me alone...,Have a nice day!"

See you at Java 8 with Java EE 7 or Virtual Dedicated Workshops / consulting!