There are many ways you can build a Stream
in Java 8. One of the most common ways, is to get a stream from a collection using the stream
method as shown below:
List<String> list = Arrays.asList("Alice", "Bob"); Stream<String> stream = list.stream(); stream.forEach(System.out::println);
You can also create a stream from values using the static method, Stream.of
:
Stream<String> stream = Stream.of("Alice", "Bob");
Arrays can be converted to streams using the static method, Arrays.stream
:
int[] numbers = { 1, 3, 6, 8 }; IntStream stream = Arrays.stream(numbers);Creating infinite streams:
The Streams API provides two static methods: Stream.iterate
and Stream.generate
, which allow you to create an infinite stream. Here's an example:
Stream<Integer> evenNumbers = Stream.iterate(0, n -> n + 2);
The example above produces an infinite stream of even numbers. The iterate
method takes a starting value and a lambda that is used to generate a new value from the previous one. In this case, the lambda returns the previous value added with 2. The stream is infinite because values are computed on demand and can be computed forever. (Note that you can use the limit
method to explicitly limit the size of the stream.)
Similarly, Stream.generate
also lets you produce an infinite stream, but the difference is that it takes a lamba of type Supplier<T>
to provide new values, rather than a lambda that applies successively to the previous value. Here's an example:
Stream<Integer> randomNumbers = Stream.generate(Math::random);