In Java 8, java.util.stream.DoubleStream was introduced to deal with primitive doubles which brings a new way to solving old problems of finding max or largest value in array, find min or smallest value in array, sum all elements in array, and average of all values in array. If you are looking to apply max, min, sum and average reduce techniques the stream reduction example or DoubleSummaryStatistics, a specialized object for collecting statistics, show how to use them.
In these examples we will show common methods exposed by DoubleStream that deal with double-value elements. In addition to dealing with doubles, IntStreams is a specialized class to deal with primitive ints and LongStream for dealing with primitive type long.
There are various ways to build a stream and DoubleStream has a builder that allows you to chain together calls to set up configuration followed by a build method that creates the stream. This code snippet below makes a call to the builder and then adds two primitive double values. It then calls the sum method to find the sum of the stream.
In the event where you have seperate streams, DoubleStream provides the ability to concat or combine streams together. To demonstrate this we created two streams via the builder, concatenated and then called the sum method.
The DoubleStream.empty returns an empty sequential DoubleStream.
The DoubleStream.generate allows you to produce an infinite stream of values on demand. The code below we will generate 10 ints and then find the distinct elements which will return the numeric value of 1.
Similar to the DoubleStream.generate, the DoubleStream.iterate will return an infinite sequential ordered DoubleStream. The first parameter to DoubleStream.iterate is the seed and in our case 0. It will iterate from 0 and for every element will add 3, so 0 + 3, 3 + 3 and so on. Since we apply the limit it will return 3 iterations thus returning 0, 3, 6.
The DoubleStream.of method returns a stream whose elements are specified. Below a stream will be initialized with 5,10 and then max taken which will return 10 as the unit test reads.
Map to DoubleStream
This example will take an ArrayList of strings and then map them to an DoubleStream by passing Double.parseDouble. Then for testing purposes we will call DoubleStream.max which will return 3.
Convert to stream of objects
If you are looking to convert DoubleStream to a stream of Double, you can call boxed method which returns the elements in the stream each boxed to an Double.
OptionalDouble is a specialized version of Optional. In the instance where you want to provide a default other than 0.0, you can call the OptionalDouble.orElse. In this example, we want to find the max value of an empty list. Since there isn't any values present it will return 5.