import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;

public class KeranjangBelanja {

    record Produk(String nama, double harga) {}

    public static void main(String[] args) {
        List<Produk> keranjang = List.of(
            new Produk("Pena", 2500.0),
            new Produk("Buku Tulis", 5000.0),
            new Produk("Penghapus", 1500.5)
        );

        // mapToDouble: stream objek berubah menjadi DoubleStream
        double total = keranjang.stream().mapToDouble(Produk::harga).sum();
        System.out.printf("Total belanja = Rp%.2f%n", total);

        double rataRata = keranjang.stream().mapToDouble(Produk::harga)
            .average().orElse(0.0);
        System.out.printf("Rata-rata     = Rp%.2f%n", rataRata);

        // flatMapToInt: lebur beberapa deret int menjadi satu stream
        int[][] stokCabang = { {12, 8, 5}, {20, 4}, {7} };
        int[] seluruhStok = Arrays.stream(stokCabang)
            .flatMapToInt(IntStream::of)
            .toArray();
        System.out.println("Stok gabungan = " + Arrays.toString(seluruhStok));
        System.out.println("Total stok    = " + Arrays.stream(stokCabang)
            .flatMapToInt(IntStream::of).sum());
    }
}
