import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

public class AlurKonsumen {
    static void catat(String pesan) {
        System.out.println("[LOG] " + pesan);
    }

    public static void main(String[] args) {
        // Consumer dasar: satu nilai masuk, tidak ada nilai keluaran
        Consumer<String> pencatat = pesan -> catat(pesan);
        pencatat.accept("Aplikasi dimulai");

        // andThen: dua aksi dijalankan berurutan pada nilai yang sama
        Consumer<String> verifikasi = pesan ->
                System.out.println("[CEK] " + pesan.length() + " karakter");
        Consumer<String> alurLengkap = pencatat.andThen(verifikasi);
        alurLengkap.accept("Sinkronisasi data");

        // forEach pada List menerima Consumer per elemen
        List<String> tugas = List.of("backup", "kirim email", "laporan");
        tugas.forEach(item -> System.out.println("- " + item));

        // BiConsumer pada Map.forEach: kunci dan nilai sekaligus
        Map<String, Integer> stok = new LinkedHashMap<>();
        stok.put("kopi", 12);
        stok.put("teh", 30);
        stok.put("susu", 7);
        stok.forEach((barang, jumlah) ->
                System.out.println(barang + " : " + jumlah + " unit"));
    }
}
