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