Stream.max() returns the maximum element of the stream based on the provided Comparator. A Comparator is a comparison function, which imposes a total ordering on some collection of objects. max() is a terminal operation which combines stream elements and returns a summary result. So, max() is a special case of reduction. The method returns Optional instance.
Syntax :
Optional<T> max(Comparator<? super T> comparator) Where, Optional is a container object which may or may not contain a non-null value and T is the type of objects that may be compared by this comparator
Exception : This method throws NullPointerException if the maximum element is null.
Example 1 :
// Implementation of Stream.max()// to get the maximum element// of the Stream according to the// provided Comparator.import java.util.*;import java.util.Optional;import java.util.Comparator;  class GFG {      // Driver code    public static void main(String[] args)    {          // Creating a list of integers        List<Integer> list = Arrays.asList(-9, -18, 0, 25, 4);          System.out.print("The maximum value is : ");          // Using stream.max() to get maximum        // element according to provided Comparator        // and storing in variable var        Integer var = list.stream().max(Integer::compare).get();          System.out.print(var);    }} |
Output :
The maximum value is : 25
Example 2 :
// Implementation of Stream.max()// to get the maximum element// of the Stream according to the// provided Comparator.import java.util.*;import java.util.Optional;import java.util.Comparator;  class GFG {      // Driver code    public static void main(String[] args)    {          // Creating a list of integers        List<Integer> list = Arrays.asList(-9, -18, 0, 25, 4);          // Using stream.max() to get maximum        // element according to provided Comparator        // Here, the smallest element in list        // will be stored in variable var        Optional<Integer> var = list.stream()                     .max(Comparator.reverseOrder());          // If a value is present, isPresent()        // will return true, else display message        if (var.isPresent()) {            System.out.println(var.get());        }        else {            System.out.println("-1");        }    }} |
Output :
-18
Example 3 :
// Implementation of Stream.max()// to get the maximum element// of the Stream according to the// provided Comparator.import java.util.*;import java.util.Optional;import java.util.Comparator;  class GFG {      // Driver code    public static void main(String[] args)    {          // Creating a list of Strings        List<String> list = Arrays.asList("G", "E", "E", "K",                                          "g", "e", "e", "k");          // using Stream.max() method with Comparator        // Here, the character with maximum ASCII value        // is stored in variable MAX        String MAX = list.stream().max(Comparator.                       comparing(String::valueOf)).get();          // Displaying the maximum element in        // the stream according to provided Comparator        System.out.println("Maximum element in the "                           + "stream is : " + MAX);    }} |
Output :
Maximum element in the stream is : k
Example 4 :
// Implementation of Stream.max()// to get the maximum element// of the Stream according to the// provided Comparator.import java.util.*;import java.util.Optional;import java.util.Comparator;  class GFG {      // Driver code    public static void main(String[] args)    {          // creating an array of strings        String[] array = { "Geeks", "for", "Lazyroar",                           "GeeksQuiz" };          // Here, the Comparator compares the strings        // based on their last characters and returns        // the maximum value accordingly        // The result is stored in variable MAX        Optional<String> MAX = Arrays.stream(array).max((str1, str2) ->                         Character.compare(str1.charAt(str1.length() - 1),                                        str2.charAt(str2.length() - 1)));          // If a value is present,        // isPresent() will return true        if (MAX.isPresent())             System.out.println(MAX.get());                else             System.out.println("-1");            }} |
Output :
GeeksQuiz
