【问题标题】:Mapping List objects using lambdas and streams使用 lambda 和流映射列表对象
【发布时间】:2019-07-10 20:42:00
【问题描述】:

首先,我有以下发票清单。每个列表对象都有一个部件号、描述、数量和价格。

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);

问什么:使用 lambdas 和流来映射PartDescriptionQuantity 上的每个 Invoice,按 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);

【问题讨论】:

  • 您期望的输出是什么?
  • 在 PartDescription 和 Quantity 上映射每个 Invoice 是什么意思。是不是在输出中这两个属性都应该可见,而您只按数量排序?或者你想在这里按两者排序?
  • @nullpointer:我也不是 100% 清楚。我想确实这两个属性都需要在输出中显示,并且只按数量排序。但它被要求使用映射。否则,Eran 的解决方案似乎是正确的。我只是想知道如何在他的解决方案中涉及映射部分。
  • 您的预期输出是什么?

标签: java lambda java-8 mapping java-stream


【解决方案1】:

你不使用map。您对Invoices 中的原始Stream 进行排序,然后打印您想要的任何属性。

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()));

【讨论】:

  • 非常感谢伊兰。但现在我想知道,现在有了你的解决方案,我有输出:partDescription 数量。假设我想要以下输出:partDescription 值。 (和数量*价格的价值,我也想按这个价值排序)你能帮我解决这个问题吗?我希望这将有助于获得更多的洞察力。
  • 非常感谢!明天我会一步一步地弄清楚,因为这里已经很晚了,但现在它真的开始有意义了。
猜你喜欢
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2016-03-06
相关资源
最近更新 更多