Friday, February 6, 2015

Comparator

Comparator is better than Comparable. To implement comparator, we have to
1. Create a comparator class which will implement "Comparator" interface.
2. Override "compare" method.
3. You can also override "reversed" method to get reverse order.
4. Call Collections.sort and pass arraylist object and comparator class object.

Song.java


package com.parvez.albumCollection;

public class Song {
    public Song(String t,String a,int r)
    {
        setArtist(a);
        setRanking(r);
        setTitle(t);
    }
    private String title;
    private String artist;
    private int ranking;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getArtist() {
        return artist;
    }

    public void setArtist(String artist) {
        this.artist = artist;
    }

    public int getRanking() {
        return ranking;
    }

    public void setRanking(int ranking) {
        this.ranking = ranking;
    }


    public String toString()
    {
        return "Title: "+ this.getTitle() + " Artist: " +getArtist() +" Ranking: " + getRanking();
    }
}


RankingComparator.java

package com.parvez.albumCollection;

import java.util.Comparator;

public class RankingComparator implements Comparator<Song>
{
    @Override    
public int compare(Song song1, Song song2) {
        return song1.getRanking()-song2.getRanking();
    }

    @Override    
public Comparator<Song> reversed() {
        return new RankingComparator(){
            @Override            
public int compare(Song song1, Song song2) {
                return song2.getRanking()-song1.getRanking();
            }
        };
    }
}


AlbumSongs.java

package com.parvez.albumCollection;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;


public class AlbumSongs {
    ArrayList<Song> songs=new ArrayList<Song>();
    public static void main(String[] args)
    {
        AlbumSongs album=new AlbumSongs();
        album.getSongs();
        album.displaySongs();
        System.out.println();
        Collections.sort(album.songs,new RankingComparator());
        album.displaySongs();
        System.out.println();
        Collections.sort(album.songs,new RankingComparator().reversed());
        album.displaySongs();
        System.out.println();
    }

    private void displaySongs() {
        for (Song song: songs)
        {
            System.out.println(song.toString());
        }
    }

    private void getSongs() {
        File file;
        BufferedReader bufferedReader;

        try        {
            file=new File("input.txt");
            bufferedReader=new BufferedReader(new FileReader(file));

            String line;
            while((line=bufferedReader.readLine())!=null)
            {
                String[] lineString=line.split(",");
                Song aSong=new Song(lineString[1],lineString[0],Integer.parseInt(lineString[2]));
                songs.add(aSong);
            }
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }


}

No comments:

Post a Comment