我目前有以下情况:
我有一个Report对象,可以包含多个Query对象. Query对象具有以下属性:Optional< Filter> comparisonFilter,Optional< String> filterChoice和int queryOutput.
并非每个查询都有比较过滤器,所以我首先检查一下.然后,我确保我得到了特定过滤器的查询(这不是问题,所以我不会详细讨论).每个过滤器都有一些选择,其中选择的数量是可变的.
以下是输入的示例(这些Query对象都具有相同的comparisonFilter):
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
});
我可以通过创建Map< String,Integer>来完成此操作,其中键是选项,值是查询输入.但是我需要再次遍历Map以使用某些值(这在这里并不重要).
输出应该是这样的:
Choice: 'First' -- Summed Output: 15
Choice: 'Second' -- Summed Output: 25
Choice: 'Third' -- Summed Output: 10
但是我想在流中的forEach中直接使用这个’Summed Output’,但是如果这不可能或不再实用,我就可以了.
我想这样做’Java 8’方式,但我似乎无法弄清楚如何.
所以我的问题是:使用新的Stream API可以缩短时间吗?
注意:如果有人对如何使这个问题更一般(可能是更好的标题和一些概括)有一些想法,请告诉我!