gpt4 book ai didi

java - 分解代码,唯一的区别是流减少操作

转载 作者:行者123 更新时间:2023-12-04 22:00:05 25 4
gpt4 key购买 nike

我有一堆方法,唯一的区别是流减少操作:

static Stream<TimeValues> avg(Stream<TimeValues> data, int batchSize) {
return data
.collect(SlidingCollector.batch(batchSize))
.stream()
.map(tvl -> {
OptionalDouble od = tvl.stream()
...
.mapToDouble(tv -> tv.doubleValue())
.average(); // <-------
...
});
}


static Stream<TimeValues> max(Stream<TimeValues> data, int batchSize) {
return data
.collect(SlidingCollector.batch(batchSize))
.stream()
.map(tvl -> {
OptionalDouble od = tvl.stream()
...
.mapToDouble(tv -> tv.doubleValue())
.max(); // <-------
...
});
}


如何分解该代码并进行参数化的归约运算(最小值,最大值,平均值和总和)?

提前致谢。

最佳答案

average()max()都是Function<DoubleStream, OptionalDouble>类型的方法,因此:

static Stream<TimeValues> avg(Stream<TimeValues> data, int batchSize) {
return reduce(data, batchSize, DoubleStream::average);
}

static Stream<TimeValues> max(Stream<TimeValues> data, int batchSize) {
return reduce(data, batchSize, DoubleStream::max);
}

private static Stream<TimeValues> reduce(Stream<TimeValues> data, int batchSize,
Function<DoubleStream, OptionalDouble> reducer) {
return data
.collect(SlidingCollector.batch(batchSize))
.stream()
.map(tvl -> {
OptionalDouble od = reducer.apply(tvl.stream()
...
.mapToDouble(tv -> tv.doubleValue()));
...
});
}

关于java - 分解代码,唯一的区别是流减少操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61558098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com