How to sort an array list with stream.sorted() in Java 8

Share post:

How to sort an array list with stream.sorted() in Java 8

Quick Answer:

In this post, we will discuss how to sort a ArrayList with steam API. We consider normal List<String> and List of the custom object in the example.

A. If you have a simple list, we can sort by invoking the steam.sorted() in the following way

A.1. The simple way to do the sorting is by following the natural order

List<String> sortedList = list.stream().sorted().collect(Collectors.toList()); 

 

 

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class ListManager {
public static void main(String[] args) {
List<String> myList = new ArrayList<>();
myList.add("India");
myList.add("Brazil");
myList.add("Argentina");
List<String> sortedList = myList.stream().sorted().collect(Collectors.toList());
sortedList.forEach(System.out::println);


}
}
output:
Argentina
Brazil
India

A.2. If you want to do the sorting in reverse order for a simple list,

List<String> sortedList = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()); 

B. If the requirement to sort a list with a custom object 

If you have an Employee list that needs to sort based on the employee's salary, see the code below.

package com.sp.stream;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class StreamSortObjectApplication {
static List<Employee> employees = Arrays.asList(
new Employee("Jon", 3000),
new Employee("Van H", 1000),
new Employee("Hein L", 1050),
new Employee("Von Mu", 4223),
new Employee("Joe Felix", 3450));

public static void main(String[] args) {

List<Employee> sortedList = employees.stream()
.sorted(Comparator.comparingInt(Employee::getSalary))
.collect(Collectors.toList());
sortedList.forEach(System.out::println);
}
static class Employee {

private String name;
private int salary;

public Employee(String name, int salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public int getSalary() {
return salary;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", salary=" + salary +
'}';
}
}
}


Output
Employee{name='Van H', salary=1000}
Employee{name='Hein L', salary=1050}
Employee{name='Jon', salary=3000}
Employee{name='Joe Felix', salary=3450}
Employee{name='Von Mu', salary=4223}

We can sort by name using the getName method instead of using getSalary
List<Employee> sortedList = employees.stream()
.sorted(Comparator.comparingInt(Employee::getName))
.collect(Collectors.toList());


Relevant tags:

#java

Smashplus

Insights

Share post: