Java 8 Stream – min() & max() Tutorial
Hello. In this tutorial, we will explain the min() and max() methods introduced in java 8.
1. Introduction
Before diving deep into the practice stuff let us understand the min()
and max()
methods introduced in java8 programming.
- Stream.min() – Returns the minimum element of the stream according to the provided comparator.
- Represented by the code syntax –
Optional<T> min(Comparator<? super T> comparator)
- It is a terminal operation that combines the stream elements and returns the final result
- Returns an optional or an empty optional if the stream is empty
- Throw the
NullPointerException
if the smallest element isnull
- Represented by the code syntax –
- Stream.max() – Returns the maximum element of the stream according to the provided comparator.
- Represented by the code syntax –
Optional<T> max(Comparator<? super T> comparator)
- It is a terminal operation that combines the stream elements and returns the final result
- Returns an optional or an empty optional if the stream is empty
- Throw the
NullPointerException
if the largest element isnull
- Represented by the code syntax –
2. Practice
Let us dive into some practice stuff from here and I am assuming that you already have the Java 1.8 or greater installed in your local machine. I am using JetBrains IntelliJ IDEA as my preferred IDE. You’re free to choose the IDE of your choice.
2.1 Find min and max integer
Create a java file in the com.java8
package and add the following code to it.
MinMaxDemo1.java
package com.java8; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Optional; /* * Stream.min() - Returns the minimum element of this stream according to the provided comparator. * Stream.max() - Returns the maximum element of this stream according to the provided comparator. */ public class MinMaxDemo1 { private static void findMinAndMaxForIntegers() { System.out.println("---- Min and Max for integer ----"); final List<Integer> integers = Arrays.asList(6, 5, 20, 2, 1); // integer comparator final Comparator<Integer> comparator = Comparator.comparing(Integer::intValue); final Optional<Integer> min = integers.stream().min(comparator); // handling the sonar issue to perform ifPresent check before fetch min.ifPresent(val -> System.out.println("Stream.min():- " + val)); final Optional<Integer> max = integers.stream().max(comparator); // handling the sonar issue to perform ifPresent check before fetch max.ifPresent(val -> System.out.println("Stream.max():- " + val)); } public static void main(String[] args) { findMinAndMaxForIntegers(); } }
Run the file and if everything goes well the following output will be logged in the IDE console.
Console output
---- Min and Max for integer ---- Stream.min():- 1 Stream.max():- 20
2.2 Find min and max string
Create a java file in the com.java8
package and add the following code to it.
MinMaxDemo2.java
package com.java8; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Optional; /* * Stream.min() - Returns the minimum element of this stream according to the provided comparator. * Stream.max() - Returns the maximum element of this stream according to the provided comparator. */ public class MinMaxDemo2 { private static void findMinAndMaxForStrings() { System.out.println("---- Min and Max for string ----"); final List<String> strings = Arrays.asList("A", "F", "Z", "B", "P"); // string comparator final Comparator<String> comparator = Comparator.comparing(String::valueOf); final Optional<String> min = strings.stream().min(comparator); // handling the sonar issue to perform ifPresent check before fetch min.ifPresent(val -> System.out.println("Stream.min():- " + val)); final Optional<String> max = strings.stream().max(comparator); // handling the sonar issue to perform ifPresent check before fetch max.ifPresent(val -> System.out.println("Stream.max():- " + val)); } public static void main(String[] args) { findMinAndMaxForStrings(); } }
Run the file and if everything goes well the following output will be logged in the IDE console.
Console output
---- Min and Max for string ---- Stream.min():- A Stream.max():- Z
2.3 Find min and max object
Create a java file in the com.java8
package and add the following code to it.
MinMaxDemo3.java
package com.java8; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Optional; /* * Stream.min() - Returns the minimum element of this stream according to the provided comparator. * Stream.max() - Returns the maximum element of this stream according to the provided comparator. */ public class MinMaxDemo3 { private static void findMinAndMaxByName(final List<Student> students) { System.out.println("\nMin and max student by name"); // student name comparator final Comparator<Student> name = Comparator.comparing(Student::getName); final Optional<Student> min = students.stream().min(name); // handling the sonar issue to perform ifPresent check before fetch min.ifPresent(val -> System.out.println("Stream.min():- " + val.toString())); final Optional<Student> max = students.stream().max(name); // handling the sonar issue to perform ifPresent check before fetch max.ifPresent(val -> System.out.println("Stream.max():- " + val.toString())); } private static void findMinAndMaxByAge(final List<Student> students) { System.out.println("\nMin and max student by age"); // student age comparator final Comparator<Student> age = Comparator.comparing(Student::getAge); final Optional<Student> minAge = students.stream().min(age); // handling the sonar issue to perform ifPresent check before fetch minAge.ifPresent(val -> System.out.println("Stream.min():- " + val.toString())); final Optional<Student> maxAge = students.stream().max(age); // handling the sonar issue to perform ifPresent check before fetch maxAge.ifPresent(val -> System.out.println("Stream.min():- " + val.toString())); } public static void main(String[] args) { System.out.println("---- Min and Max for object ----"); // student list final List<Student> students = new ArrayList<>(); students.add(new Student("John", 41)); students.add(new Student("Jane", 20)); students.add(new Student("Adam", 17)); students.add(new Student("Eve", 3)); students.add(new Student("Mathew", 10)); findMinAndMaxByName(students); findMinAndMaxByAge(students); } } class Student { private final String name; private final int age; public Student(final String name, final int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } }
Run the file and if everything goes well the following output will be logged in the IDE console.
Console output
---- Min and Max for object ---- Min and max student by name Stream.min():- Student [name=Adam, age=17] Stream.max():- Student [name=Mathew, age=10] Min and max student by age Stream.min():- Student [name=Eve, age=3] Stream.min():- Student [name=John, age=41]
That is all for this tutorial and I hope the article served you with whatever you were looking for. Happy Learning and do not forget to share!
3. Summary
In this tutorial, we learned the min()
and max()
methods introduced in java8 programming along with the implementation. The min()
method helps to determine the smallest element from the given stream on the basis of a comparator. Similarly, the max
method helps to determine the largest element from the given stream on the basis of a comparator. You can download the source code from the Downloads section.
4. Download the Eclipse Project
This was a tutorial about the min()
and max()
methods in java 8.
You can download the full source code of this example here: Java 8 Stream – min() & max() Tutorial