У меня есть Map<String, Item>, где Item - это сущности, которые мне нужно собрать в отдельный List<Item>. Собрать нужные Item я пытаюсь в методе formOrders:
public class InvoiceData {
static final Vendor vendor = Vendor.getInstance();
private List<Invoice> orders;
private List<Customer> customers;
private Map<String, Item> items;
public List<Invoice> getOrders() {
return orders;
}
public InvoiceData() {
orders = formOrders();
}
//...сustomerSupplier, itemSupplier...
public List<Invoice> formOrders() {
List<Invoice> result = new ArrayList<>(); //лист заказов, сюда собственно будут собираться объекты Invoice
customers = customerSupplier.get(); //покупатели
items = itemSupplier.get(); //товары
customers.forEach(customer -> {
Invoice invoice = new Invoice();
result.add(invoice);
invoice.setVendor(vendor);
invoice.setRecipient(customer);
invoice.setTax(0.2);
invoice.setItems(items.entrySet().stream()
.filter(item -> item.getKey().equals(customer.getId()))
.map(Map.Entry::getValue)
.collect(Collectors.toList()));
});
return result;
}}
Сам список заказов orders состоит из объектов класса Invoice
public class Invoice {
private Vendor vendor;
private Customer recipient;
private List<Item> items;
private BigDecimal priceOverall;
private Double tax;
public Invoice() {
}
// ...get и set...
В классе InvoiceData происходит "наполнение" данными. В дальнейшем объект этого класса будет использован для генерации отчетов(dynamicreports). customerSupplier и itemSupplier предоставляют константный набор элементов для инициализации cписков customers и items соответственно.
Проще говоря: я беру определенного покупателя(Customer) и нахожу все товары, которые он заказал(хранятся в Map). Поскольку знакомство с java Stream API я начал недавно, я не совсем понимаю как собрать элементы из Map в List с помощью Stream. Нужно ли писать собственный Collector или есть более простое решение? Буду рад любой помощи.
Если просто взять из мапы какие-то ключи (например, отфильтрованные по какому-то предикату), а значения собрать в листе, то что-то типа такого:
itemSupplier.get().entrySet().stream()
.filter(entry -> entry.getKey().equals(customer.getId()))
.map(Map.Entry::getValue)
.collect(Collectors.toList())
);
Но непонятно что вы хотите дальше делать с инвойсом и зачем создавался лист orders...
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости