Compare commits

...

2 Commits

Author SHA1 Message Date
Leonid
79c26666c6 Решение Задачи на стримы от Java Gym Rat 2025-04-02 12:41:11 +03:00
Leonid
97aaf4c8fc Задача на стримы от Java Gym Rat 2025-04-01 19:30:53 +03:00
4 changed files with 141 additions and 0 deletions

View File

@@ -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<Order> 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));
}
}

View File

@@ -0,0 +1,22 @@
package com.algos.gym_rat;
import java.util.List;
public class Order {
String orderId;
String customerName;
List<Product> products;
public Order(String orderId, String customerName) {
this.orderId = orderId;
this.customerName = customerName;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
}

View File

@@ -0,0 +1,63 @@
package com.algos.gym_rat;
import java.util.*;
import java.util.stream.Collectors;
public class OrderAnalysis {
// Рассчитать полную стоимость заказа
public static Double calculateOrderTotal(Order order) {
return order
.getProducts()
.stream()
.mapToDouble(p -> p.getQuantity() * p.getPrice())
.sum();
}
//Получить список наименований товаров из заказов
public static Set<String> getUniqueProducts(List<Order> orders) {
return orders
.stream()
.flatMap(o -> o.getProducts().stream())
.map(Product::getName)
.collect(Collectors.toSet());
}
//Вывести наименования N популярных товаров в порядке уменьшения популярности
//Популярный товар - товар, который больше остальных покупается
public static List<String> findMostPopularProduct(List<Order> orders, int topN) {
Map<String, Integer> popularProducts = new HashMap<>();
for (Order order : orders) {
List<Product> 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<String> findMostPopularProductNice(List<Order> 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.<String, Integer>comparingByValue().reversed())
.limit(topN)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}
}

View File

@@ -0,0 +1,26 @@
package com.algos.gym_rat;
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;
}
}