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

Java8 lambdas分组约简与映射

高经艺
2023-03-14

给定以下transaction类的list,使用Java 8 lambda,我希望获得resultantdtolist,每个帐户类型一个。

public class Transaction {

    private final BigDecimal amount;
    private final String accountType;
    private final String accountNumber;

}

public class ResultantDTO {

    private final List<Transaction> transactionsForAccount;

    public ResultantDTO(List<Transaction> transactionsForAccount){
        this.transactionsForAccount = transactionsForAccount;
    }

}

到目前为止,我使用以下代码按accountType列表 进行分组。

Map<String, List<Transaction>> transactionsGroupedByAccountType = transactions
    .stream()
    .collect(groupingBy(Transaction::getAccountType));

如何返回列表 ,将列表从每个映射键传递到构造函数中,其中包含每个AccountType中的一个resultantDTo

共有1个答案

丘学海
2023-03-14

您可以在单流操作中执行此操作:

public List<ResultantDTO> convert(List<Transaction> transactions) {
    return transactions.stream().collect(
            collectingAndThen(
                groupingBy(
                        Transaction::getAccountType,
                        collectingAndThen(toList(), ResultantDTO::new)),
                map -> new ArrayList<>(map.values())));
}

在这里,CollectingAndthen使用了两次:一次用于下游的Collector将列表转换为ResultantDTo对象,一次用于将结果映射转换为其值的列表。

 类似资料:
  • 我有一个对象列表,如下所示: 在<范围内,每天都有一个元素。 我希望能够根据和之间的间隔将这些元素减少到不同的时态分组中。如果和之间的差异大于4年,我希望将它们分组为年。如果差异小于四年,但大于一年,我想把它们分成几个月。如果小于一年,但大于一个月,我想分成几周。任何少于一个月的,不需要分组。 当我说“group”时,我的意思是我想总结属于特定年份的所有东西的元素(使用上面的第一个示例),并为每个

  • 关于元组,上一讲中涉及到了这个名词。本讲完整地讲述它。 先看一个例子: >>>#变量引用str >>> s = "abc" >>> s 'abc' >>>#如果这样写,就会是... >>> t = 123,'abc',["come","here"] >>> t (123, 'abc', ['come', 'here']) 上面例子中看到的变量t,并没有报错,也没有“最后一个有效”,而是将对象做

  • 下课: 我现在有一个,我想将其转换为(应该是)的总和。使这变得困难的是,我想在内部映射中正好有26个条目,其中第26个被称为“其他”,它总结了所有数字低于其他25个的条目。 我得到了以下代码:

  • 我通读了地图和地图分区之间的理论差异, 但我下面描述的问题更多地基于GC活动 = = 提前感谢。任何帮助都将不胜感激。

  • 我正在构建图形ql-javaSpring引导应用程序。假设我有这个模式: 在BE上,我使用的是JOOQ pojos。 当前,所有的foo都被提取,然后对于每个foo,所有的条都通过另一个查询提取。我想通过一个查询来实现这一点: 你知道如何做到这一点吗?我是一个真正的GraphQL新手。 技术堆栈:Spring Boot JOOQ graphql java graphql java工具

  • 主要内容:1. 一对一,2. 一对多,3. 多对一,4. 多对多映射约束 映射约束是一种数据约束,表示通过关系集可以与另一个实体相关的实体的数量。 它在描述涉及两个以上实体集的关系集时最有用。 对于实体集A和B上的二元关系集R,有四种可能的映射基数。这些如下: 一对一(1:1) 一对多(1:M) 多对一(M:1) 多对多(M:M) 1. 一对一 在一对一映射中,E1中的实体与E2中的至多一个实体相关联,并且E2中的实体与E1中的至多一个实体相关联。 2. 一对