У меня есть 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...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте, есть ли возможность обращаться с одного jFrame к элементам другого jFrame?
Работаю в Android StudioС помощью моей программы можно опубликовать пост в сообществе ВК
C Новым Годом) никак не могу понять как заполнить двумерный массив цифрами от 1 до 8 размерностью 8 на 8Кроме как заполнить его вручную
Здравствуйте, прошу Вас о помощи Очень короткий код на Java: