In this HackerRank java comparator problem in the java programming language you have Given an array of n Player objects, write a comparator that sorts them in order of decreasing score; if 2 or more players have the same score, sort those players alphabetically by name. To do this, you must create a Checker class that implements the Comparator interface, then write an int compare(Player a, Player b) method implementing the Comparator.compare(T o1, T o2) method.
HackerRank Java Comparator problem solution.
import java.util.*; class Checker implements Comparator<Player>{ @Override public int compare(Player a, Player b){ if (a.score == b.score){ return a.name.compareTo(b.name);//alphabetically } else { return b.score - a.score;//decreasing } } } class Player{ String name; int score; Player(String name, int score){ this.name = name; this.score = score; } } class Solution { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); Player[] player = new Player[n]; Checker checker = new Checker(); for(int i = 0; i < n; i++){ player[i] = new Player(scan.next(), scan.nextInt()); } scan.close(); Arrays.sort(player, checker); for(int i = 0; i < player.length; i++){ System.out.printf("%s %sn", player[i].name, player[i].score); } } }
Second solution in java8 programming.
import java.util.*; // Write your Checker class here class Checker implements Comparator<Player>{ public int compare(Player a, Player b) { // If 2 Players have the same score if(a.score == b.score){ // Order alphabetically by name return a.name.compareTo(b.name); } // Otherwise, order higher score first return ((Integer) b.score).compareTo(a.score); } } class Player{ String name; int score; Player(String name, int score){ this.name = name; this.score = score; } } class Solution { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); Player[] player = new Player[n]; Checker checker = new Checker(); for(int i = 0; i < n; i++){ player[i] = new Player(scan.next(), scan.nextInt()); } scan.close(); Arrays.sort(player, checker); for(int i = 0; i < player.length; i++){ System.out.printf("%s %sn", player[i].name, player[i].score); } } }