我有一个用例需要在这个对象中总结不同的域名,所以我这样编码,我可以把它放在一个流中吗?在一个java流lambda函数中总结不同的值
回答
java.util.stream.IntStream.sum()
是终端操作。
终端操作后,您不能调用另一个流任务。
如果您的集合中没有太多元素,那么GhostCat解决方案就没有问题。
如果不是这种情况,为避免在records
集合上迭代5次,应该使用另一种方法。
您可以使用流来做到这一点,但我不确定您会获得可读性,因为您应该编写自己的代码来计算聚合。
一个典型的循环在这方面似乎罚款:
int totalUnits = 0;
int totalReturns = 0;
...
for (DynamoSalesAggregateSummaryRecord record : records){
totalUnits += record.getUnits();
totalReturns += record.getReturns();
...
}
是的,我首先写了这个,但我觉得我可以使用流来最小化代码... –
一些用例与流非常相关,它不太明显。 – davidxxx
老实说,我不会这么做。相反:摆脱摆在首位的重复代码:写一个小帮手调用:
return records.stream().mapToInt(accessorMethod).sum();
(您通过访问该方法)。
然后你可以去:
int totals = fetch(DynamoSalesAggregateSummaryRecord::getUnits) + fetch(DynamoSalesAggregateSummaryRecord::getReturns) + ...
但除此之外, - 它实际上并不清楚你打算在这里做什么。上面的例子假设你将构建所有条目的“总计”总和。如果情况并非如此 - 而且你想要“不同的”款项,我的建议是放弃使用mapToInt()
。而是这样做:
class SumHelper {
private int unitTotals = 0;
private int returnTotals = 0;
...
public add(DynamoSalesAggregateSummaryRecord record) {
unitTotals += record.getUnits();
...
使用,如:
SumHelper helper = new SumHelper;
records.forEach(r -> helper.add(r));
换句话说:你要调用一个记录多个不同的方法;打造不同款项。你不能这样做与流 - 作为一个操作创建多个结果。所以你需要一些其他种“存储”来跟踪不同的结果。
另一种方法是创建一个单独的方法getTotalSum
无论是在DynamoSalesAggregateSummaryRecord
类或(更好) - 外部辅助。该方法概括了所有必需的一个DynamoSalesAggregateSummaryRecord
实例的领域,那么就概括:
int totalSum =
records.stream()
.mapToInt(DynamoSalesAggregateSummaryRecord::getTotalSum).sum()
- 1. 在不同的函数中改变一个结构体的值
- 2. 如何在javascript中总结两个不同的函数
- 3. 的Java 8流:在总和值的不同键
- 4. 从不同的函数总结总结 - Javascript
- 5. 结合两个lambda函数
- 6. java中的AWS Lambda函数
- 7. 案例当不同的值然后总结另一个值?
- 8. 从一个查询中的一个表中总结不同的值
- 9. 在函数中嵌入不同的函数:functor或lambda?
- 10. Excel:如何在同一个单元格中总结两个不同的数字?
- 11. 在Java中总结两个整数
- 12. 的Java 8函数总是返回相同的值在不考虑参数
- 13. 在同一行中获取值的汇总MYSQL函数
- 14. 在Java和Matlab中给出不同结果的指数函数
- 15. 总不是一个函数 - 的MongoDB /流星
- 16. 总结一个聚合函数
- 17. 使用boost创建一个总是抛出的lambda函数
- 18. lambda函数在Java中8,没有参数和返回值
- 19. 写一个函数,在一个熊猫数据框中的某一行中总结出某些值
- 20. 总结js中的函数
- 21. 从vba中的两个子程序中总结出两个值在同一个单元格中的数值
- 22. 干涸的Java(lambda函数?)
- 23. 在Java中实现递归lambda函数
- 24. 从函数返回一个lambda函数
- 25. 总结不同模型中的数字
- 26. 为按钮指定一个函数 - lambda有什么不同?
- 27. 在Java流中重用相同的值
- 28. MySQL查询:如何总结在列3个不同的值,表示结果总的每个值的设定
- 29. 总结一下多个值
- 30. 调用结构中的lambda函数
'流>的(DynamoSalesAggregateSummaryRecord :: getUnits,...)flatMapToInt(F - 。 > records.stream()。mapToInt(f))。sum()' –
shmosel