import java.util.function.Supplier;

public class PemasokNilai {
    static int jumlahPanggilan = 0;

    static String susunLaporan() {
        jumlahPanggilan++;
        return "Laporan penjualan Q4";
    }

    public static void main(String[] args) {
        Supplier<String> pabrikLaporan = () -> susunLaporan();

        // Deklarasi ini TIDAK menjalankan susunLaporan()
        Supplier<String> masihRencana = pabrikLaporan;
        System.out.println("Sebelum get(): panggilan = " + jumlahPanggilan);

        // Barulah di sini laporan benar-benar disusun
        String laporan = masihRencana.get();
        System.out.println("Setelah get() : panggilan = " + jumlahPanggilan);
        System.out.println(laporan);

        // Supplier sebagai factory: setiap get() membuat objek baru
        Supplier<StringBuilder> pabrikTeks = StringBuilder::new;
        StringBuilder a = pabrikTeks.get();
        StringBuilder b = pabrikTeks.get();
        a.append("terpisah");
        System.out.println("a = " + a + ", b kosong? " + (b.length() == 0));
    }
}
