import java.util.LinkedHashMap;
import java.util.Map;

public class AplikasiPasangan {
    public static void main(String[] args) {
        Pasangan<String, Integer> umurBudi = new Pasangan<>("Budi", 17);
        Pasangan<String, Double> beratSiti = new Pasangan<>("Siti", 48.5);
        System.out.println("Umur  : " + umurBudi.getKiri() + " = " + umurBudi.getKanan());
        System.out.println("Berat : " + beratSiti.getKiri() + " = " + beratSiti.getKanan());

        int tahunDepan = umurBudi.getKanan() + 3;   // Integer, tanpa cast
        System.out.println("Umur 3 tahun lagi: " + tahunDepan);

        // Tiga type parameter sekaligus
        Triple<String, Integer, Boolean> baris = new Triple<>("pensil", 12, true);
        System.out.println("Triple: " + baris);

        // Map.Entry: pasangan bawaan pustaka standar
        Map<String, Integer> stok = new LinkedHashMap<>();
        stok.put("pensil", 12);
        stok.put("buku", 7);
        for (Map.Entry<String, Integer> entri : stok.entrySet()) {
            System.out.println(entri.getKey() + " -> " + entri.getValue());
        }
    }
}

class Triple<A, B, C> {
    private final A pertama;
    private final B kedua;
    private final C ketiga;

    Triple(A pertama, B kedua, C ketiga) {
        this.pertama = pertama;
        this.kedua = kedua;
        this.ketiga = ketiga;
    }

    @Override
    public String toString() {
        return "(" + pertama + ", " + kedua + ", " + ketiga + ")";
    }
}
