Case Study:

Anda diberi daftar informasi mahasiswa: NIM, Nama dan IPK. Tugas Anda adalah mengurutkan data sesuai dengan IPK mereka dalam urutan menurun. Jika dua siswa memiliki IPK yang sama, maka aturlah sesuai dengan Nama mereka dalam urutan abjad. Jika kedua siswa itu juga memiliki Nama yang sama, maka urutkanlah sesuai dengan NIM mereka. Tidak ada dua siswa yang memiliki NIM yang sama (Unique).

Format Input:
(N adalah jumlah data mahasiswa yang ingin diinput)

Masukkan jumlah data: N
Masukkan data:
NIM Nama IPK

Contoh Input:
Masukkan jumlah data: 5
0340008533 Rumpiah 3.68
0340008585 Asham 3.85
0340008556 Samsara 3.75
0340008519 Sambira 3.75
0340008522 Fahrah 3.76

Contoh Output:
Hasil setelah di sorting:
Asham
Fahrah
Samsara
Sambira
Rumpiah

Answer:

Untuk kelas mahasiswa, Anda tinggal buat POJO biasa sesuai dengan atribut yang dibutuhkan.

 

import java.util.*;

public class Main {

    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {

        System.out.print("Masukkan jumlah data: ");
        int jmlData = input.nextInt();

        List<Mahasiswa> daftarMhs = new ArrayList<>();

        for (int i = 0; i < jmlData ; i++) {
            Mahasiswa mhs = new Mahasiswa();
            mhs.setNIM(input.nextLong());
            mhs.setNama(input.next());
            mhs.setIPK(input.nextDouble());
            daftarMhs.add(mhs);
        }

        Comparator<Mahasiswa> comparator = (o1, o2) -> {
            if (o1.getIPK() > o2.getIPK())
                return -1;

            if (o1.getIPK() == o2.getIPK() && o1.getNIM() < o2.getNIM())
                return -1;

            return 1;
        };

        daftarMhs.sort(comparator);

        for (Mahasiswa mhsall:daftarMhs)
            System.out.println(mhsall.toString());
    }
}