In this example we can see record Person and we use stream’s sorted(Comparator<? super T> comparator) method to sort the List of people by their age. So sorted(Comparator<? super T> comparator) accept as parameter Comparator. For this reason we have to create Comparator and we sort inside by age.
The documentation for sorted(Comparator<? super T> comparator) state:
Returns a stream consisting of the elements of this stream, sorted according to the provided Comparator
.
For ordered streams, the sort is stable. For unordered streams, no stability guarantees are made.
This is a stateful intermediate operation.
import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; public class MainClassTest { record Person (String name, Integer age) {} public static void main(String[] args) { List<Person> people = List.of( new Person("Jim", 56), new Person("Tom", 13), new Person("Maria", 20) ); Comparator<Person> ageComparator = (p1, p2) -> p1.age().compareTo(p2.age); // Sort by natural order List<Person> sortedPeopleList = people .stream() .sorted(ageComparator) .collect(Collectors.toList()); // get the youngest person System.out.println("Youngest person: " + sortedPeopleList.get(0)); // get the oldest person Integer lastIndex = sortedPeopleList.size() - 1; System.out.println("Oldest person: " + sortedPeopleList.get(lastIndex)); } }
Output:
Youngest person: Person[name=Tom, age=13]
Oldest person: Person[name=Jim, age=56]