具有以下阶级的:
public class TimeInterval {
private ZonedDateTime time;
private Double value1;
private Double value2;
}
其中TimeInterval.time是一天中的时间间隔,我想要做的是按天分组并聚合值. 棘手的部分是,我想根据特定条件应用两种不同类型的聚合.
例如:
2018-01-01T00:00, 1.0, 2.0
2018-01-01T08:00, null, null
2018-01-01T16:00, 5.0, 6.0
2018-01-02T00:00, 1.0, 2.0
2018-01-02T08:00, 3.0, 4.0
2018-01-02T16:00, 5.0, 6.0
2018-01-03T00:00, null, null
2018-01-03T08:00, null, null
2018-01-03T16:00, null, null
应汇总为:
2018-01-01, 32.0 - nulls are replaced with 0.0 in this case
2018-01-02, 44.0 - all values valid
2018-01-03, null - all intervals with null values, final value is null
聚合函数是value1 * value2
,但要点是,如果只有部分间隔是空值(上例中的2018-01-01),但如果所有的间隔都是空值,我希望当天的最终值为空值(上例中的2018-01-03),则希望将空值替换为0.0.
如何使用Java Streams实现这一点?