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

流,根据不同的条件对不同的字段进行过滤和求和

戈嘉慕
2023-03-14

我有一张清单:

ID | Product Code | Product Type | Transaction Amt | Charges Amt | Charges ID 
1  | 001          | 001          | 10.00           | 0.01        | 001
2  | 001          | 001          | 11.00           | 0.01        | 001
3  | 002          | 001          | 12.00           | 0.01        | 002

我想有这样的结果:

ID | Product Code | Product Type | Transaction Amt | Charges Amt | Charges ID
1  | 001          | 001          | 21.00           | 0.01        | 001
3  | 002          | 001          | 12.00           | 0.01        | 002
    Map<String, Transaction> map = txs.stream()
        .map(s -> {
            s.setTotalCount(1);
            return s;
        })
        .collect(Collectors.toMap(f -> f.getProductCode() + f.getProductType()
        Function.identity(), 
        (s, a) -> new FeeAllocationTransactionModel(
                s.getProductCode(),
                s.getProductType(),
                s.getTranzAmt().add(a.getTranzAmt()),
                s.getCharges().add(a.getFeeCharges()),
                s.getTotalCount() + 1
        )));
    List<Transaction> reduced = new ArrayList<>(map.values());
ID | Product Code | Product Type | Transaction Amt | Charges Amt | Charges ID
1  | 001          | 001          | 21.00           | **0.02**        | 001
3  | 002          | 001          | 12.00           | 0.01        | 002

共有1个答案

田念
2023-03-14

您可以将mergeFunction中的费用id检查到Collectors.tomap:

java prettyprint-override">(s, a) -> {
    double charges = (s.getChargesId().equals(a.getChargesId())
        ? s.getCharges()
        : s.getCharges().add(a.getFeeCharges());
    return new FeeAllocationTransactionModel(
                s.getProductCode(),
                s.getProductType(),
                s.getTranzAmt().add(a.getTranzAmt()),
                charges,
                s.getTotalCount() + 1);
}
 类似资料:
  • 我有个人课: 我有一个叫personList的人的名单: 现在我需要找到所有状态为“不活跃”的人,不管这个人是否有身份证。如果一个人没有身份证,但状态为“活跃”,也包括那个人。我正在使用Java流进行过滤: 流式传输后的结果是没有人被选中。第一个人没有被选中是因为它没有通过第二个过滤器,最后一个人没有被选中是因为它没有通过第一个过滤器。 我想我可以通过使用将两个过滤器合并成一个来修复它,但是我正在

  • null 或用java

  • 我正在尝试使用elasticsearch搜索产品。例如,如果产品是汽车,它将有一些字段,如“颜色”,“品牌”,“型号”,“公里”,……如果它是衣服,它将只有“颜色”,“尺寸”,……我想在弹性索引所有这些信息,以便能够搜索公里在aaa公里和bbb公里之间的汽车,和/或xxxx型号,相同的衣服或任何其他产品。 如何在elasticsearch中创建这样的字段?我希望所有的产品在相同的索引,这样用户可以

  • 问题内容: 我在查询需要在SUM DISTINCT Rows处苦苦挣扎。一定有办法做到这一点…但我迷路了。 这是我得到的: 这给了我34行,为每个属于userid4的县提供了不同的人口数量,但是我怎么得到PopEstimate2005和EstimatesBase2000的总和? 类似的东西(但这不是合法的查询): 当然,将Zipcodes.CountyID添加到GroupBy的末尾后,我又回到了3

  • 可以对搜索结果进行过滤,只显示包含特定字段值的文档。也可以创建否定过滤器,排除包含特定字段值的文档。 从 Fields 表或 Documents 表中选择要添加的字段过滤器。除了可以创建积极字段和消极过滤器外,Documents 表还可以过滤某一字段是否存在。使用过的过滤器会在 Query 栏下方显示。消极过滤器用红色显示。 从 Fields 列表中添加一个过滤器: 点击想要过滤的字段名。这里显示

  • 本文向大家介绍AngularJS实现根据不同条件显示不同控件,包括了AngularJS实现根据不同条件显示不同控件的使用技巧和注意事项,需要的朋友参考一下 由于项目需求,需要实现根据不同条件显示不同控件的功能。具体要求如下图所示: 即当选择“每单固定减”时,下方只显示“减免金额”一栏;     当选择“每单固定折扣”时,下方只显示“折扣比例”一栏;     当选择“每单满额减”时,下方只显示“满.