当前位置: 首页 > 知识库问答 >
问题:

使用lambdas和streams映射列表对象

宗项禹
2023-03-14

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

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);
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个答案

阙辰龙
2023-03-14

您不使用map。您可以对发票的原始进行排序,然后打印您希望的任何属性。

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()));
 类似资料:
  • 1)做这件事的正确方法是什么?我做错了什么? 2)流是线程安全的吗?我正在多线程环境中工作,所以我是否应该使用返回TRAAD安全集合的收集器?

  • 我正在使用两个for循环将下面的对象结构列表转换为一个HashMap,如下所示。 我如何使用lambdas/streams做同样的事情呢?我试过用平面地图,但没用。流式传输时无法访问嵌套得注册区域. 基于@Nidhish Krishnan答案更新工作代码示例

  • 我不确定如何将嵌套的结果集映射到域实体中。 以下是我想做的事情的大概想法: 2张桌子 域实体(包含嵌套列表) LoanEntity.java Book.java 持久实体 Loans.java Dao.xml(不知道如何映射它,尝试使用一个) 注意:此查询将复制找到的#本书的记录。 LoanMapper.java 下面的错误是我得到的: 错误:结果类型中的未知属性“books.bookName”c

  • 我不熟悉Java8,不知道如何使用流及其排序方法。如果我有下面的映射,那么如何使用Java8按值对该映射进行排序,从而只获取前10个条目。 我知道在Java 8之前,我们可以按以下链接排序:https://stackoverflow.com/a/109389/4315608

  • lambdas和streams的概念有点弱,所以可能有些东西真的没有任何意义,但我会尝试表达我想要发生的事情。 我有一个类发票,其中有一个项目名称,价格,和数量。我必须映射项目名称和总成本(价格*数量)。 这将在多个发票对象上完成。 此外,我需要排序他们的总数,也过滤那些超过一定的数量,例如。100.把它们放进地图后我该怎么做?

  • 我想使用Java流按对用户列表进行分组。 例如,我有。