簡體   English   中英

使用 group-by java 8 lambda 流計算平均值

[英]Calculate average values with group-by java 8 lambda streaming

我有一個包含 2 個屬性( date and an integer value )的對象列表。 我正在嘗試編寫一個 java 8 lambda 函數來過濾列表,其中2.00 and 4.00之間的時間平均值應該單獨計算,而4.01 and 6.00之間的值分別計算而不管日期

public class Obj{
  private Date date;
  private int value;
}

示例對象映射如下

[
{
 date: '2010-02-01 2.00',
 value: 20
},
{
 date: '2010-02-01 4.00',
 value: 5
},
{
 date: '2010-02-02 3.00',
 value: 55
},
{
 date: '2010-02-02 3.30',
 value: 7
},
{
 date: '2010-02-03 5.00',
 value: 88
},
{
 date: '2010-02-03 5.20',
 value: 1
}
]

在這里,值20, 5, 55, 7應該單獨計算,因為當日期值在 2.00 和 4.00 之間時,這些值應該單獨計算88 and 1應該單獨計算,因為這些值是時間為 4.01 和 6.00 時的位置

任何幫助將非常感激

為了簡化代碼。像這樣更改您的 Obj 類

class Obj {
    private String date;
    private int value;
}

並且數據只包含小時

分組和歸約代碼如下:

    list.stream()
        .collect(Collectors.groupingBy(new Function<Obj, Integer>() {
            @Override
            public Integer apply(Obj o) {
                return (int) Float.parseFloat(o.getDate()) / 4;
            }
        }, Collectors.summarizingInt(new ToIntFunction<Obj>() {
            @Override
            public int applyAsInt(Obj value) {
                return value.getValue();
            }
        }));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM