import java.util.Comparator;
import java.util.List;

public class UrutkanProduk {

    record Produk(String nama, String kategori, int harga) {}

    public static void main(String[] args) {
        List<Produk> produk = List.of(
                new Produk("Teh Hijau", "minuman", 45000),
                new Produk("Kopi Arabika", "minuman", 85000),
                new Produk("Roti Gandum", "makanan", 30000),
                new Produk("Madu Hutan", "makanan", 30000)
        );

        // sorted(): urutan natural -- elemen harus Comparable
        List<String> namaTerurut = produk.stream()
                .map(Produk::nama)
                .sorted()
                .toList();
        System.out.println("Natural    : " + namaTerurut);

        // sorted(Comparator.comparingInt): urut berdasarkan field harga
        List<String> hargaNaik = produk.stream()
                .sorted(Comparator.comparingInt(Produk::harga))
                .map(p -> p.nama() + " (" + p.harga() + ")")
                .toList();
        System.out.println("Harga naik : " + hargaNaik);

        // reversed + thenComparing: harga turun, nama sebagai penentu
        List<Produk> hargaTurun = produk.stream()
                .sorted(Comparator.comparingInt(Produk::harga).reversed()
                        .thenComparing(Produk::nama))
                .toList();
        System.out.println("Harga turun:");
        hargaTurun.forEach(p -> System.out.println("  " + p.nama() + " - " + p.harga()));
    }
}
