import java.util.*;

public class ComparatorModern {
    record Siswa(String nama, int nilai) {}

    public static void main(String[] args) {
        List<Siswa> kelas = new ArrayList<>(List.of(
                new Siswa("Budi", 78),
                new Siswa("Siti", 92),
                new Siswa("Dewi", 78),
                new Siswa("Anton", 85)));

        // Kriteria ganda: nilai tertinggi dulu, nama sebagai pemecah seri.
        Comparator<Siswa> peringkat = Comparator
                .comparingInt(Siswa::nilai).reversed()
                .thenComparing(Siswa::nama);
        kelas.sort(peringkat);
        System.out.println("Nilai turun  : " + kelas);

        // Urutan lain dari list yang sama: nama naik, lalu nilai turun.
        Comparator<Siswa> namaLaluNilai = Comparator
                .comparing(Siswa::nama)
                .thenComparing(Comparator.comparingInt(Siswa::nilai).reversed());
        kelas.sort(namaLaluNilai);
        System.out.println("Nama naik    : " + kelas);

        // nullsFirst: null diperlakukan paling kecil, sisanya urutan alami.
        List<String> tim = new ArrayList<>(Arrays.asList("Siti", null, "Budi", null));
        tim.sort(Comparator.nullsFirst(Comparator.naturalOrder()));
        System.out.println("nullsFirst   : " + tim);
    }
}
