Java 分解代码,其中唯一的区别是流缩减操作
我有一系列方法,其中唯一的区别是流减少操作:Java 分解代码,其中唯一的区别是流缩减操作,java,java-stream,Java,Java Stream,我有一系列方法,其中唯一的区别是流减少操作: static Stream<TimeValues> avg(Stream<TimeValues> data, int batchSize) { return data .collect(SlidingCollector.batch(batchSize)) .stream() .map(tvl -> {
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 avg(流数据,int batchSize){
返回数据
.collect(SlidingCollector.batch(batchSize))
.stream()
.map(tvl->{
OptionalDouble od=tvl.stream()
...
.mapToDouble(tv->tv.doubleValue())
.average();//{
OptionalDouble od=tvl.stream()
...
.mapToDouble(tv->tv.doubleValue())
.max();//和都是函数
类型方法,因此:
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()));
...
});
}
static Stream avg(流数据,int batchSize){
返回reduce(数据、批大小、DoubleStream::average);
}
静态流最大值(流数据,int batchSize){
返回reduce(数据、batchSize、DoubleStream::max);
}
私有静态流缩减(流数据,int batchSize,
功能减速机){
返回数据
.collect(SlidingCollector.batch(batchSize))
.stream()
.map(tvl->{
OptionalDouble od=减速器。应用(tvl.stream()
...
.mapToDouble(tv->tv.doubleValue());
...
});
}
和都是函数
类型方法,因此:
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()));
...
});
}
static Stream avg(流数据,int batchSize){
返回reduce(数据、批大小、DoubleStream::average);
}
静态流最大值(流数据,int batchSize){
返回reduce(数据、batchSize、DoubleStream::max);
}
私有静态流缩减(流数据,int batchSize,
功能减速机){
返回数据
.collect(SlidingCollector.batch(batchSize))
.stream()
.map(tvl->{
OptionalDouble od=减速器。应用(tvl.stream()
...
.mapToDouble(tv->tv.doubleValue());
...
});
}
方法.average
和.max
都是函数
,您可以将它们存储在以下类型中:
Function<DoubleStream, OptionalDouble> avg = DoubleStream::average; // ie ds -> ds.average()
Function<DoubleStream, OptionalDouble> mx = DoubleStream::max;
因此,这些电话将是
Function<DoubleStream, OptionalDouble> avg = ds -> ds.average();
Function<DoubleStream, OptionalDouble> mx = DoubleStream::max;
method(...,10, avg);
method(...,10, mx);
函数avg=ds->ds.average();
函数mx=DoubleStream::max;
方法(…,10,平均值);
方法(…,10,mx);
方法.average
和.max
都是函数
,您可以将它们存储在以下类型中:
Function<DoubleStream, OptionalDouble> avg = DoubleStream::average; // ie ds -> ds.average()
Function<DoubleStream, OptionalDouble> mx = DoubleStream::max;
因此,这些电话将是
Function<DoubleStream, OptionalDouble> avg = ds -> ds.average();
Function<DoubleStream, OptionalDouble> mx = DoubleStream::max;
method(...,10, avg);
method(...,10, mx);
函数avg=ds->ds.average();
函数mx=DoubleStream::max;
方法(…,10,平均值);
方法(…,10,mx);
Aside-您可能想将data.collect(SlidingCollector.batch(batchSize))
移动到另一个方法。如果输入稍微假设一下,您也可能会这样做。谢谢@Naman-我会看一看。Aside-您可能想移动data.collect(SlidingCollector.batchSize))
也可以使用另一种方法。如果使用稍微假设的输入,您也可以使用。谢谢@Naman-我会看一看。谢谢@Andreas-我尝试使用DoubleStream::reduce(),但只能使用Double::min和Double::MaxThreak@Andreas-我尝试使用DoubleStream::reduce())但只能使其与Double::min和Double::max一起工作