我有一個用例需要在這個對象中總結不同的域名,所以我這樣編碼,我可以把它放在一個流中嗎?在一個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. 從不同的函數總結總結 - Javascript
- 4. 結合兩個lambda函數
- 5. java中的AWS Lambda函數
- 6. 案例當不同的值然後總結另一個值?
- 7. 從一個查詢中的一個表中總結不同的值
- 8. Excel:如何在同一個單元格中總結兩個不同的數字?
- 9. 在Java中總結兩個整數
- 10. 在同一行中獲取值的彙總MYSQL函數
- 11. 總不是一個函數 - 的MongoDB /流星
- 12. 使用boost創建一個總是拋出的lambda函數
- 13. 寫一個函數,在一個熊貓數據框中的某一行中總結出某些值
- 14. lambda函數在Java中8,沒有參數和返回值
- 15. 總結js中的函數
- 16. 從vba中的兩個子程序中總結出兩個值在同一個單元格中的數值
- 17. 總結不同模型中的數字
- 18. 在Java中實現遞歸lambda函數
- 19. 乾涸的Java(lambda函數?)
- 20. 爲按鈕指定一個函數 - lambda有什麼不同?
- 21. 從函數返回一個lambda函數
- 22. 在Java流中重用相同的值
- 23. 總結一下多個值
- 24. 調用結構中的lambda函數
- 25. AS3:在一個函數中設置的變量在另一個函數中具有不同的值
- 26. 腳本SQL從不同數據庫中總結表的值
- 27. Python:獲得Lambda函數的總和
- 28. Java 8嵌套lambda函數查找特定鍵的總和
- 29. Oracle sql窗口函數 - 與結果總共在同一行
- 30. 使用lambda中的Java流中的參數調用構造函數
'流>的(DynamoSalesAggregateSummaryRecord :: getUnits,...)flatMapToInt(F - 。 > records.stream()。mapToInt(f))。sum()' –
shmosel