import java.util.List;

public class KhususVsReduce {

    record Produk(String nama, String kategori, int harga) {}

    public static void main(String[] args) {
        List<Produk> produk = List.of(
                new Produk("Kopi Arabika", "minuman", 85000),
                new Produk("Teh Hijau", "minuman", 45000),
                new Produk("Roti Gandum", "makanan", 30000)
        );

        // reduce manual: identitas + accumulator
        int viaReduce = produk.stream()
                .map(Produk::harga)
                .reduce(0, Integer::sum);
        System.out.println("reduce  : " + viaReduce);

        // Operasi khusus IntStream: langsung tanpa lambda
        int viaSum = produk.stream()
                .mapToInt(Produk::harga)
                .sum();
        System.out.println("sum     : " + viaSum);

        long jumlahElemen = produk.stream().count();
        System.out.println("count   : " + jumlahElemen);

        double rataRata = produk.stream()
                .mapToInt(Produk::harga)
                .average()
                .orElse(0);
        System.out.printf("average : %.2f\n", rataRata);
    }
}
