Программа о закупках компаний. И мне нужно получить определенные данные c от них, используя лямбды и потоки.
КОМПАНИЯ
@AllArgsConstructor
public class Company {
private String name; // nazwa firmy
private String cityHeadquarters; // siedziba firmy
private int employees; // ilość pracowników
private List<Purchase> purchaseList; // lista zakupów wykonanych przez firmę (co firma kupiła)
}
ПРОДУКТ
@Data
@AllArgsConstructor
public class Product {
private String name; // nazwa produktu
private double price; // cena produktu
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Product)) return false;
Product product = (Product) o;
return Double.compare(product.price, price) == 0 &&
Objects.equals(name, product.name);
}
@Override
public int hashCode() {
return Objects.hash(name, price);
}
}
ПОКУПКА
@Data
@AllArgsConstructor
public class Purchase { // klasa reprezentuje zakup
private Product product; // produkt zakupiony
private LocalDate purchaseDate; // data dokonania zakupu
private double quantity; // zakupiona ilość produktu
private UNIT unit; // jednostka zakupu (np. w gramach)
}
MAIN к сожалению Основной класс слишком велик, но он состоит в основном из созданных объектов: продукты, компании и покупки. Со списком всех компаний внизу.
Как вернуть компанию, которая потратила больше всего денег на покупки? Я пробовал что-то вроде этого:
// 11. Zwróć firmę która dokonała zakupów na największą kwotę
private static Company zad11(List<Company> companies) {
List<Company> list1 = companies.stream()
.map(c -> c+ c.getPurchaseList().stream()
.filter(p -> p.getQuantity()*p.getProduct().getPrice()))
}