In Java 8, java.util.stream.LongStream was introduced to deal with primitive longs 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. These numeric reductions of max, min, sum and average make what used to be a hard tedious challenge much simpler. If you are looking to apply these techniques the stream reduction example or LongSummaryStatistics, a specialized object for collecting statistics, show how to use them.
In these examples we will show common methods exposed by LongStream that deal with long-value elements. In addition to dealing with ints, DoubleStreams is a specialized class to deal with primitive double and IntStream for dealing with primitive type int.
There are various ways to build a stream and LongStream 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 int 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 LongStream.empty returns an empty sequential LongStream.
The LongStream.generate allows you to produce an infinite stream of values on demand. In the code snippet below we will generate 10 longs and then find the distinct elements which will return numeric 1.
Similar to the LongStream.generate, the LongStream.iterate will return an infinite sequential ordered LongStream. The first parameter to LongStream.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 LongStream.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 LongStream
This example will take an ArrayList of strings and then map them to an LongStream by passing Integer.parseInt. Then for testing purposes we will call LongStream.max which will return 3.
Convert to stream of objects
If you are looking to convert LongStream to a stream of Longs, you can call boxed method which returns the elements in the stream each boxed to an Long.
OptionalLong is a specialized version of Optional. In the instance where you want to provide a default other than 0, you can call the OptionalLong.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.