import java.util.Arrays;
import java.util.List;

public class MeratakanData {

    record Pesanan(String pelanggan, List<String> item) {}

    public static void main(String[] args) {
        // Struktur bersarang List<List<String>> diratakan dengan List::stream
        List<List<String>> keranjangPerHari = List.of(
                List.of("Kopi", "Roti"),
                List.of("Teh", "Madu", "Gula"),
                List.of("Air")
        );
        List<String> semuaItem = keranjangPerHari.stream()
                .flatMap(List::stream)
                .toList();
        System.out.println("Rata satu tingkat : " + semuaItem);

        // Record berisi List: item lintas pesanan digabung
        List<Pesanan> pesanan = List.of(
                new Pesanan("Budi", List.of("Kopi", "Roti")),
                new Pesanan("Siti", List.of("Teh")),
                new Pesanan("Dewi", List.of("Madu", "Gula"))
        );
        List<String> itemTerjual = pesanan.stream()
                .flatMap(p -> p.item().stream())
                .toList();
        System.out.println("Item terjual       : " + itemTerjual);

        // List<int[]> diratakan dengan Arrays::stream -> IntStream
        List<int[]> stokPerRak = List.of(new int[]{10, 20}, new int[]{5, 8, 12});
        int totalStok = stokPerRak.stream()
                .flatMapToInt(Arrays::stream)
                .sum();
        System.out.println("Total stok         : " + totalStok);

        // Teks multi-baris -> daftar kata dengan lines() lalu flatMap
        String deskripsi = "Kopi Arabika Premium\nBerasal dari Gayo";
        List<String> kata = deskripsi.lines()
                .flatMap(baris -> Arrays.stream(baris.split(" ")))
                .toList();
        System.out.println("Kata               : " + kata);
    }
}
