How to Sort an ArrayList in Java using Comparator


We use Comparator when we want to sort elements in a Collection based on a custom-defined order.

import java.util.Objects;

public class MusicAlbum {

    private String title;
    private String artist;
    private int releaseYear;

    public MusicAlbum(String title, String artist, int releaseYear) {
        this.title = title;
        this.artist = artist;
        this.releaseYear = releaseYear;
    }

    public String getTitle() {
        return title;
    }

    public String getArtist() {
        return artist;
    }

    public int getReleaseYear() {
        return releaseYear;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MusicAlbum that = (MusicAlbum) o;
        return releaseYear == that.releaseYear &&
                Objects.equals(title, that.title) &&
                Objects.equals(artist, that.artist);
    }

    @Override
    public int hashCode() {
        return Objects.hash(title, artist, releaseYear);
    }

    @Override
    public String toString() {
        return "MusicAlbum{" +
                "title='" + title + '\'' +
                ", artist='" + artist + '\'' +
                ", releaseYear=" + releaseYear +
                '}';
    }
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Main {

    public static void main(String[] args) {

        List<MusicAlbum> albums = new ArrayList<>();
        albums.add(new MusicAlbum("Pulse", "Pink Floyd", 1971));
        albums.add(new MusicAlbum("Parachutes", "Coldplay", 2000));
        albums.add(new MusicAlbum("Thriller", "Michael Jackson", 1982));
        albums.add(new MusicAlbum("Back in Black", "AC/DC", 1980));


        //Using Comparator to sort by release year
        Collections.sort(albums, Comparator.comparingInt(MusicAlbum::getReleaseYear));

        //Result: 1
        System.out.println("Sorting by album released year");
        for (MusicAlbum album : albums) {
            System.out.println(album);
        }

        //Using Comparator to sort by album artist
        Collections.sort(albums, Comparator.comparing(MusicAlbum::getArtist));

        //Result: 1
        System.out.println("Sorting by album artist");
        for (MusicAlbum album : albums) {
            System.out.println(album);
        }

    }
}
Output:



Sorting by album released year
MusicAlbum{title='Pulse', artist='Pink Floyd', releaseYear=1971}
MusicAlbum{title='Back in Black', artist='AC/DC', releaseYear=1980}
MusicAlbum{title='Thriller', artist='Michael Jackson', releaseYear=1982}
MusicAlbum{title='Parachutes', artist='Coldplay', releaseYear=2000}


Sorting by album artist
MusicAlbum{title='Back in Black', artist='AC/DC', releaseYear=1980}
MusicAlbum{title='Parachutes', artist='Coldplay', releaseYear=2000}
MusicAlbum{title='Thriller', artist='Michael Jackson', releaseYear=1982}
MusicAlbum{title='Pulse', artist='Pink Floyd', releaseYear=1971}

Facing issues? Have Questions? Post them here! I am happy to answer!

Author Info:

Rakesh (He/Him) has over 14+ years of experience in Web and Application development. He is the author of insightful How-To articles for Code2care.

Follow him on: X

You can also reach out to him via e-mail: rakesh@code2care.org

Copyright © Code2care 2024 | Privacy Policy | About Us | Contact Us | Sitemap