/**
 * Sample Java Application - FileExamples.com
 */
package com.fileexamples.sample;

import java.util.*;
import java.util.stream.Collectors;

public class SampleApp {
    record Product(int id, String name, double price, String category) {}

    static class ProductService {
        private final List<Product> products = new ArrayList<>();
        public void addProduct(Product p) { products.add(p); }
        public List<Product> findByCategory(String cat) {
            return products.stream().filter(p -> p.category().equalsIgnoreCase(cat)).collect(Collectors.toList());
        }
        public OptionalDouble getAveragePrice() {
            return products.stream().mapToDouble(Product::price).average();
        }
        public Map<String, Long> countByCategory() {
            return products.stream().collect(Collectors.groupingBy(Product::category, Collectors.counting()));
        }
    }

    public static void main(String[] args) {
        var service = new ProductService();
        service.addProduct(new Product(1, "Laptop", 999.99, "Electronics"));
        service.addProduct(new Product(2, "Headphones", 149.99, "Electronics"));
        service.addProduct(new Product(3, "Coffee Maker", 79.99, "Kitchen"));
        System.out.println("By category: " + service.countByCategory());
        service.getAveragePrice().ifPresent(avg -> System.out.printf("Average: $%.2f%n", avg));
    }
}