A java stream is a sequence of elements and at some time you might be required to know the last stream element.
There are three methods of getting the last element of a stream.
reduce
method of a stream takes a parameter of type java.util.function.BinaryOperator
which is a functional interface having a single method apply
.This method accepts two arguments and returns a result.
Thus, we can supply a Lambda expression to reduce
matching the signature of apply
.
This lamdba expression takes two elements and just returns the second element, then at the end of stream we will be getting the last element.
Example,
List<Integer> list = Arrays.asList(new Integer[] {1,2,3,55,67,34,20}); Integer lastElement = list.stream(). reduce((first, second) -> second). orElse(null);
This method will return null
if the stream is empty.
Method 2: Using skip
skip
method of java.util.stream.Stream
accepts a numeric value and skip the number of stream elements equal to this value.
It returns a stream with remaining elements after skipping those elements.
Thus, if skip
is supplied a number which is one less than the total number of elements in the stream, then the resulting stream will have the last element. Example,
List<Integer> list = Arrays.asList(new Integer[] {1,2,3,55,67,34,20}); // total number of stream elements long count = list.stream().count(); // element at count -1 position Integer last = list.stream(). skip(count - 1). findFirst(). get();
For getting the total number of stream elements, count()
method is used.
Also, skip()
returns a stream, use its findFirst()
method to get the first stream element.
findFirst()
returns an Optional object, use its get()
method to get the value of element.
Guava library has a class
com.google.common.collect.Streams
which has a findLast()
method.This method takes a stream as argument and returns its last element. Example,
List<Integer> list = Arrays.asList(new Integer[] {1,2,3,55,67,34,20}); Optional<Integer> lastElement = com.google.common.collect.Streams.findLast(list.stream()); Integer last = lastElement.get();
findLast()
method returns an Optional object, hence you need to call its get()
method to get the value of last element.
These are the three ways in which last element of stream can be retrieved. Hit the clap if the article was useful