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

JAVA List GroupBy多字段和Sum

柳梓
2023-03-14

我有列表有字段名称,货币和金额。我想按名称、货币和金额来分组。

List<myPojo> rows= ................

public class myPojo
{

    private String name;
    private String currency;
    private BigDecimal amount;

......................
}

我想要列表中的结果/输出

共有1个答案

阎京
2023-03-14

您可以使用流API。使用collectors.tomap并使用AbstractMap.SimpleEntry作为Map的键。然后为同一键的多个值定义合并函数。

List<myPojo> res = new ArrayList<>(rows.stream()
                .collect(Collectors.toMap(
                        e -> new AbstractMap.SimpleEntry<>(e.getName(), e.getCurrency()),
                        Function.identity(),
                        (a, b) -> new myPojo(a.getName(), a.getCurrency(), a.getAmount().add(b.getAmount()))))
                .values());

演示:

List<myPojo> list = new ArrayList<>();
list.add(new myPojo("A", "USD", new BigDecimal(1.0)));
list.add(new myPojo("A", "USD", new BigDecimal(2.0)));
list.add(new myPojo("A", "USD", new BigDecimal(3.0)));
list.add(new myPojo("B", "USD", new BigDecimal(1.0)));
list.add(new myPojo("B", "USD", new BigDecimal(2.0)));
list.add(new myPojo("B", "USD", new BigDecimal(3.0)));
list.add(new myPojo("A", "US", new BigDecimal(1.0)));
list.add(new myPojo("A", "US", new BigDecimal(2.0)));
list.add(new myPojo("A", "US", new BigDecimal(3.0)));
List<myPojo> res = new ArrayList<>(list.stream()
            .collect(Collectors.toMap(
                    e -> new AbstractMap.SimpleEntry<>(e.getName(), e.getCurrency()),
                    Function.identity(),
                    (a, b) -> new myPojo(a.getName(), a.getCurrency(), a.getAmount().add(b.getAmount()))))
            .values());
System.out.println(res.toString());

产出:

[myPojo [name=B, currency=USD, amount=6], 
 myPojo [name=A, currency=USD, amount=6], 
 myPojo [name=A, currency=US, amount=6]]
 类似资料:
  • 问题内容: 我正在阅读有关“ onChange”的文档, 并且对我的论坛有多个字段(例如选择框,复选框,文本区域和输入)会怎么办感到好奇?我是否要做类似的事情: 到初始状态,然后使用相同的概念来处理该字段的更改? 问题答案: 编辑:回想起来,这个答案很糟糕,请改用 Junle Li 的答案。 是的,您可以完全做到这一点。但是,当您获得许多表单组件时,编写所有处理程序和getInitialState

  • 我正在通过猫鼬使用MongoDB。 > MongoDB是执行集合扫描还是索引有助于提高查询效率?查询是否与仅使用id字段有任何不同? 如果MongoDB在您查询非索引字段时进行集合扫描。如果集合扫描完全相同,查询多个非索引字段是否会加快查询速度?假设我查询五个非索引字段而不是两个(都返回相同的文档)。两个查询是否都进行相同的集合扫描?

  • 我有一个系统,其中搜索查询具有不同boost值的多个字段。它在Lucene上运行。净额2.9。4因为这是一个Umbraco(6.x)网站,这就是Lucene的版本。NET的CMS使用。 我的客户问我是否可以添加词干分析,所以我编写了一个自定义分析器,可以执行标准/小写/停止/PorterStemmer。堵塞过滤器似乎工作正常。 但是现在,当我试图将我的新分析器与MultiFieldQueryPar

  • 我有一张清单,傻瓜 我想按类别分组,然后合计金额和价格。 现在我只需要用一个保存汇总的金额和价格的Foo对象替换String键。这就是我被困住的地方。我好像找不到办法。

  • 问题内容: 我想表达以下声明: 子选择返回一行,其中包含两列(和),需要将其插入到target中。这样做的原因是,是的主键。是指(外键)。 这可能吗? 问题答案: 我不确定首先使用哪种SQL方言是否可能通过,但是您当然可以使用以下方式表达这种查询: 或与jOOQ

  • 我配置了一个带有两个字段的Elasticsearch索引:“name”和“type”。当我执行下面的查询时,没有得到任何结果,因为“actor”在“type”字段中。 有没有任何方法可以执行一个包含多个单词的查询,并且即使一些单词在“name”字段中而其他单词在“type”字段中也可以得到结果。 谢谢你的帮助!