Stream sorted() operation in Java is an intermediate operation, and it is used to sort the elements of a Stream. It accepts a stream of elements and returns a new, sorted stream. Sorting is according to the natural order.
The elements of a stream need to be Comparable. Otherwise, we’ll get the java.lang.ClassCastException when the terminal operation gets executed.
Java Stream sorted() operation – examples
Example 1
Sort the list of strings:
class Test {
public static void main(String[] args) {
List<String> names = new ArrayList<>(Arrays.asList("John", "Alex", "Megan", "Bobby", "Xavier"));
List<String> orderedNames = names.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(orderedNames);
}
}
Output: [Alex, Bobby, John, Megan, Xavier]
Example 2
Sort a list of customs objects.
Let’s create a Student class that implements a Comparable:
class Student implements Comparable<Student> {
private String firstName;
private String lastName;
private int grade;
public Student(String firstName, String lastName, int grade) {
this.firstName = firstName;
this.lastName = lastName;
this.grade = grade;
}
@Override
public String toString() {
return "student: { firstName: " + firstName + ", lastName: " + lastName + ", grade: " + grade;
}
@Override
public int compareTo(Student student) {
if (this.grade == student.grade) {
return 0;
} else if (this.grade > student.grade) {
return 1;
} else {
return -1;
}
}
}
Now let’s write a program that takes a list of students and sorts it out based on the grade field:
class Test {
public static void main(String[] args) {
List<Student> sortedStudents = getStudents().stream()
.sorted()
.collect(Collectors.toList());
System.out.println(sortedStudents);
}
private static List<Student> getStudents() {
List<Student> students = new ArrayList<>();
students.add(new Student("Steve", "Rogers", 8));
students.add(new Student("John", "Doe", 5));
students.add(new Student("Melissa", "Smith", 7));
students.add(new Student("Megan", "Norton", 4));
students.add(new Student("Tom", "Johnson", 9));
return students;
}
}
Output:
[student: { firstName: Megan, lastName: Norton, grade: 4,
student: { firstName: John, lastName: Doe, grade: 5,
student: { firstName: Melissa, lastName: Smith, grade: 7,
student: { firstName: Steve, lastName: Rogers, grade: 8,
student: { firstName: Tom, lastName: Johnson, grade: 9]
Note that the ordering was performed based on the grade field because we used that field in the compareTo() method.
I hope this tutorial was helpful to you. To learn more, check out other Java Functional Programming tutorials.