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

具有流API的对象的Sum属性

秦哲瀚
2023-03-14

我目前有以下情况:

我有一个Report对象,它可以包含多个Query对象。Query对象具有属性:可选

并不是每个查询都有比较过滤器,所以我首先检查一下。然后,我确保获得特定过滤器的查询(这不是这里的问题,所以我不会详细讨论)。每个过滤器都有一些选择,其中选择的数量是可变的。

这是一个输入示例(这些Query对象都具有相同的比较过滤器):

Query 1 -- Choice: 'First' -- Output: 10
Query 1 -- Choice: 'First' -- Output: 5
Query 1 -- Choice: 'Second' -- Output: 25
Query 1 -- Choice: 'Third' -- Output: 10

现在,我想对每个唯一选项的查询输出求和。我目前有以下代码:

report
.getQueries()
.stream()
.filter(q -> q.getComparisonFilter().isPresent())
.filter(q -> q.getComparisonFilter().get().equals(view.getFilter().get()))
.forEach(query -> {

    //Sum the query outputs per choice

});

我可以通过创建一个映射来实现这一点

输出应如下所示:

Choice: 'First' -- Summed Output: 15
Choice: 'Second' -- Summed Output: 25
Choice: 'Third' -- Summed Output: 10

但我想在流中的forEach中直接使用这个“汇总输出”,但如果这不再可行或实用,我可以接受。

我想用“Java 8”的方式来实现这一点,但我似乎不知道如何实现。

所以我的问题是:有没有可能用新的流API来缩短这个时间?

注意:如果有人对我如何使这个问题更一般(可能是更好的标题和一些概括)有一些想法,请让我知道!


共有1个答案

巫马松
2023-03-14

如果我理解得很好,你确实在寻找一个groupingBy,然后你必须通过求和它们的int属性来对值进行分组。

分组方式(groupingBy)将为您提供一个地图

import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.summingInt;
...

Map<String, Integer> map = 
    report.getQueries()
          .stream()
          .filter(q -> q.getComparisonFilter().isPresent())
          .filter(q -> q.getComparisonFilter().get().equals(view.getFilter().get()))
          .collect(groupingBy(q -> q.filterChoice.get(), summingInt(q -> q.queryOutput)));

请注意,您应该检查筛选选项是否为空(可能添加另一个筛选子句?)。您可以看到这个小要点,它提供了一个简单的基本演示来说明原理。

另外,可选类提供了equals的合理实现,因此filter子句可以如下所示:

.filter(q -> q.getComparisonFilter().equals(view.getFilter()))
 类似资料:
  • 我正在努力处理一个简单的RxJs查询,但我似乎无法理解。如果观察对象被包装在一个对象中,我似乎不知道如何合并它们。如果我直接从flatMap返回Observable,那么这个示例可以正常工作,但我还需要在输出中输入名称。我怎样才能做到这一点? 我正在使用RxJS 5.0.0-beta.2 基本数据结构: RxJs函数: 预期结果: 实际结果:

  • 如何处理对象的javascript数组,例如: 并通过求和这些值合并重复的键。为了得到这样的东西: 我尝试过迭代并添加到一个新数组中,但这没有起到作用:

  • 问题内容: 是否有可能从具有特定属性的数组中获取对象?还是我需要遍历数组中的所有对象并检查属性是否是我正在寻找的特定对象? 编辑:谢谢你给我正确的方向,但我有一个转换此问题。 //再编辑一次:好的,如果只有一个特定的结果?这也是可行的方法吗? 问题答案: //这不起作用-NSArray不是Images的子类型-那么如果只有1种可能的结果怎么办? 您无法在编译时证明数组上只有一个可能的结果。您实际要

  • 问题内容: 我是Java的新手,并且开始使用Java 。我想做的是为学生创建一个。每个学生都有与其相关的不同属性()。我试图弄清楚如何使用此属性添加新的学生对象。这是我所拥有的: 问题答案: 您需要的是以下内容:

  • 问题内容: 用Javascript将是: 但是Python中相同的语法会创建一个字典,那不是我想要的 问题答案: 有两种功能用途。

  • 我想建立一个本体模型,在那里我可以表示一个实体的缺失,可以这么说。例如,我希望有Rain和No_Rain,我将它们定义为不相交类。在此之后,我有了object属性has_rain。我想以某种方式能够推理出,对于同一个人来说,不可能同时拥有has_rain(雨)和has_rain(无雨)我已经搜索了很多,但是没有找到我问题的答案。也许我在什么地方错过了。对不起,如果我没有解释好一切,这是我的第一个问