Составление списков объектов с использованием лямбд и потоков - PullRequest
0 голосов
/ 17 февраля 2019

Для начала у меня есть следующий список счетов.У каждого объекта списка есть номер детали, описание, количество и цена.

Invoice[] invoices = new Invoice[8];
invoices[0] = new Invoice("83","Electrische schuurmachine",7,57.98);
invoices[1] = new Invoice("24","Power zaag", 18, 99.99);
invoices[2] = new Invoice("7","Voor Hamer", 11, 21.50);
invoices[3] = new Invoice("77","Hamer", 76, 11.99);
invoices[4] = new Invoice("39","Gras maaier", 3, 79.50);
invoices[5] = new Invoice("68","Schroevendraaier", 16, 6.99);
invoices[6] = new Invoice("56","Decoupeer zaal", 21, 11.00);
invoices[7] = new Invoice("3","Moersleutel", 34, 7.50);

List<Invoice> list = Arrays.asList(invoices);

Что требуется: используйте лямбда-выражения и потоки для сопоставления каждого счета-фактуры на PartDescription и Quantity, сортируйте по Quantityи покажите результаты.

Итак, что у меня сейчас есть:

list.stream()
    .map(Invoice::getQuantity)
    .sorted()
    .forEach(System.out::println);

Я сопоставил его по количеству и также отсортировал по количеству, и я получаю следующие результаты:

3
7
11
16
18
21
34
76

Но как мне сопоставить и PartDescription, так что это отражено и в моих результатах перед показанными величинами?Я не могу сделать это:

list.stream()
    .map(Invoice::getPartDescription)
    .map(Invoice::getQuantity)
    .sorted()
    .forEach(System.out::println);

1 Ответ

0 голосов
/ 17 февраля 2019

Вы не используете map.Вы сортируете оригинал Stream из Invoice с, а затем распечатываете любые свойства, которые пожелаете.

list.stream()
    .sorted(Comparator.comparing(Invoice::getQuantity))
    .forEach(i -> System.out.println(i.getgetQuantity() + " " + i.getPartDescription()));

РЕДАКТИРОВАТЬ: Если вы хотите отсортировать по количеству * цена:

list.stream()
    .sorted(Comparator.comparing(i -> i.getQuantity() * i.getPrice()))
    .forEach(i -> System.out.println(i.getgetQuantity() *  i.getPrice() + " " + i.getPartDescription()));
...