diff --git a/src/main/java/com/algos/gym_rat/Main.java b/src/main/java/com/algos/gym_rat/Main.java new file mode 100644 index 0000000..ec56f94 --- /dev/null +++ b/src/main/java/com/algos/gym_rat/Main.java @@ -0,0 +1,30 @@ +package com.algos.gym_rat; + +import java.util.ArrayList; +import java.util.List; + +public class Main { + + public static void main(String[] args) { + + Product product1 = new Product("Молоко", 10, 2.0); + Product product2 = new Product("Масло", 1, 10.0); + Product product3 = new Product("Сыр", 5, 2.0); + Product product4 = new Product("Хлеб", 3, 1.0); + Product product5 = new Product("Лаваш", 4, 5.0); + + Order order1 = new Order("1", "Вася"); + order1.setProducts(new ArrayList<>(List.of(product1, product2, product3, product4))); + + System.out.println(OrderAnalysis.calculateOrderTotal(order1)); + + Order order2 = new Order("2", "Коля"); + order2.setProducts(new ArrayList<>(List.of(product2, product4, product5))); + + List orders = new ArrayList<>(List.of(order1, order2)); + System.out.println(OrderAnalysis.getUniqueProducts(orders)); + + System.out.println(OrderAnalysis.findMostPopularProduct(orders, 3)); + System.out.println(OrderAnalysis.findMostPopularProductNice(orders, 3)); + } +} \ No newline at end of file diff --git a/src/main/java/com/algos/gym_rat/Order.java b/src/main/java/com/algos/gym_rat/Order.java index 2320b19..d780ccd 100644 --- a/src/main/java/com/algos/gym_rat/Order.java +++ b/src/main/java/com/algos/gym_rat/Order.java @@ -6,4 +6,17 @@ public class Order { String orderId; String customerName; List products; + + public Order(String orderId, String customerName) { + this.orderId = orderId; + this.customerName = customerName; + } + + public List getProducts() { + return products; + } + + public void setProducts(List products) { + this.products = products; + } } diff --git a/src/main/java/com/algos/gym_rat/OrderAnalysis.java b/src/main/java/com/algos/gym_rat/OrderAnalysis.java index 416bc54..acf424f 100644 --- a/src/main/java/com/algos/gym_rat/OrderAnalysis.java +++ b/src/main/java/com/algos/gym_rat/OrderAnalysis.java @@ -1,26 +1,63 @@ package com.algos.gym_rat; -import java.util.List; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; public class OrderAnalysis { // Рассчитать полную стоимость заказа public static Double calculateOrderTotal(Order order) { - return 0.0; + return order + .getProducts() + .stream() + .mapToDouble(p -> p.getQuantity() * p.getPrice()) + .sum(); } //Получить список наименований товаров из заказов public static Set getUniqueProducts(List orders) { - return null; + return orders + .stream() + .flatMap(o -> o.getProducts().stream()) + .map(Product::getName) + .collect(Collectors.toSet()); } //Вывести наименования N популярных товаров в порядке уменьшения популярности //Популярный товар - товар, который больше остальных покупается public static List findMostPopularProduct(List orders, int topN) { - return null; + Map popularProducts = new HashMap<>(); + for (Order order : orders) { + List products = order.getProducts(); + for (Product product : products) { + popularProducts.merge(product.getName(), product.getQuantity(), Integer::sum); + } + } + + return popularProducts + .entrySet() + .stream() + .sorted((e1, e2) -> { + return e2.getValue().compareTo(e1.getValue()); + }) + .limit(topN) + .map(Map.Entry::getKey) + .collect(Collectors.toList()); + } + public static List findMostPopularProductNice(List orders, int topN) { + + return orders + .stream() + .flatMap(o -> o.getProducts().stream()) + .collect(Collectors.groupingBy(Product::getName, Collectors.summingInt(Product::getQuantity))) + .entrySet() + .stream() + .sorted(Map.Entry.comparingByValue().reversed()) + .limit(topN) + .map(Map.Entry::getKey) + .collect(Collectors.toList()); } } \ No newline at end of file diff --git a/src/main/java/com/algos/gym_rat/Product.java b/src/main/java/com/algos/gym_rat/Product.java index aed213e..80f96d6 100644 --- a/src/main/java/com/algos/gym_rat/Product.java +++ b/src/main/java/com/algos/gym_rat/Product.java @@ -5,4 +5,22 @@ public class Product { String name; Integer quantity; Double price; + + public Product(String name, Integer quantity, Double price) { + this.name = name; + this.quantity = quantity; + this.price = price; + } + + public Integer getQuantity() { + return quantity; + } + + public Double getPrice() { + return price; + } + + public String getName() { + return name; + } }