import java.util.List;
import java.util.stream.Stream;

public class AnatomiPipeline {

    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("Roti Gandum", "makanan", 30000),
                new Produk("Madu Hutan", "makanan", 120000)
        );

        // Tahap 1: sumber data -- List berubah menjadi Stream
        Stream<Produk> sumber = produk.stream();

        // Tahap 2: operasi antara -- menyaring elemen
        Stream<Produk> yangMahal = sumber.filter(p -> p.harga() >= 50000);

        // Tahap 3: operasi antara lagi -- memetakan Produk menjadi String
        Stream<String> namaMahal = yangMahal.map(Produk::nama);

        // Tahap 4: operasi akhir -- memicu eksekusi dan menghasilkan List
        List<String> hasil = namaMahal.toList();

        System.out.println("Hasil pipeline : " + hasil);
        System.out.println("List asli      : " + produk.size() + " produk, tidak berubah");
    }
}
