How to Sort a List in Java: Complete Guide with Code Examples

Sorting a list in Java is a fundamental task that developers often encounter. It allows data to be ordered in either ascending or descending order, which is crucial for many applications like searching, data analysis, and optimization algorithms. In this article, we will dive into different techniques for sorting a list in Java, covering both built-in methods and custom sorting algorithms.

How to Sort a List in Java?

There are multiple ways to sort a list in Java. Below we will explore the most common methods:

  • Using Java’s Collections.sort() method
  • Using Java’s List.sort() method
  • Custom sorting using a comparator
  • Using streams to sort

Let’s start with the most basic method: Collections.sort().

1. Using Collections.sort() Method

This is the most commonly used approach for sorting lists in Java. The Collections.sort() method takes a list and sorts it in ascending order by default.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ListSortExample {
    public static void main(String[] args) {
        List numbers = new ArrayList<>();
        numbers.add(5);
        numbers.add(3);
        numbers.add(8);
        numbers.add(1);

        System.out.println("Before sorting: " + numbers);
        
        Collections.sort(numbers);
        
        System.out.println("After sorting: " + numbers);
    }
}
    

Output:

Before sorting: [5, 3, 8, 1]
After sorting: [1, 3, 5, 8]
    

2. Using List.sort() Method

The List.sort() method was introduced in Java 8 and allows sorting using a Comparator. It’s a more modern alternative to Collections.sort() and can be used directly on any List object.

import java.util.ArrayList;
import java.util.List;

public class ListSortExample {
    public static void main(String[] args) {
        List numbers = new ArrayList<>();
        numbers.add(5);
        numbers.add(3);
        numbers.add(8);
        numbers.add(1);

        System.out.println("Before sorting: " + numbers);
        
        // Sorting the list using List.sort()
        numbers.sort(Integer::compareTo);
        
        System.out.println("After sorting: " + numbers);
    }
}
    

Output:

Before sorting: [5, 3, 8, 1]
After sorting: [1, 3, 5, 8]
    

3. Custom Sorting Using a Comparator

Sometimes you may need to sort based on a custom order. You can achieve this by creating a custom comparator.

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class CustomSortExample {
    public static void main(String[] args) {
        List names = new ArrayList<>();
        names.add("John");
        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");

        System.out.println("Before sorting: " + names);
        
        // Sorting based on name length
        names.sort(Comparator.comparingInt(String::length));
        
        System.out.println("After sorting by name length: " + names);
    }
}
    

Output:

Before sorting: [John, Alice, Bob, Charlie]
After sorting by name length: [Bob, John, Alice, Charlie]
    

4. Using Streams for Sorting

If you’re using Java 8 or later, you can leverage the power of streams to sort lists. Streams provide a more functional style of programming, making it concise and readable.

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

public class StreamSortExample {
    public static void main(String[] args) {
        List numbers = new ArrayList<>();
        numbers.add(10);
        numbers.add(4);
        numbers.add(8);
        numbers.add(3);
        
        System.out.println("Before sorting: " + numbers);

        // Sorting using streams
        List sortedNumbers = numbers.stream()
                                              .sorted()
                                              .collect(Collectors.toList());
        
        System.out.println("After sorting: " + sortedNumbers);
    }
}
    

Output:

Before sorting: [10, 4, 8, 3]
After sorting: [3, 4, 8, 10]
    

Sorting in Descending Order

To sort a list in descending order, you can either use the Collections.reverseOrder() method or implement a custom comparator for the reverse order.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ReverseSortExample {
    public static void main(String[] args) {
        List numbers = new ArrayList<>();
        numbers.add(10);
        numbers.add(4);
        numbers.add(8);
        numbers.add(3);
        
        System.out.println("Before sorting: " + numbers);

        // Sorting in descending order
        Collections.sort(numbers, Collections.reverseOrder());

        System.out.println("After sorting in descending order: " + numbers);
    }
}
    

Output:

Before sorting: [10, 4, 8, 3]
After sorting in descending order: [10, 8, 4, 3]
    

Conclusion

Sorting a list in Java is easy and flexible, thanks to the numerous built-in methods available in the Java Collections framework. Whether you’re using Collections.sort(), List.sort(), or even Java Streams, you can sort your data in a variety of ways to meet your application’s needs. We hope this guide helps you understand how to efficiently sort lists in Java.

Please follow and like us:

Leave a Comment