我知道我是否使用:
double data[][] = new double[n][];
// fill the array
DoubleStream stream = Arrays.stream(data).flatMapToDouble(Arrays::stream);
int max = stream.max().getAsDouble();
DoubleStream stream = Arrays.stream(data).flatMapToDouble(Arrays::stream);
int min = stream.min().getAsDouble();
我将获得流具有双倍值的最小值和最大值。
但是我无法为自己的生活弄清楚如何使其成为“供应商”。以来
Supplier<Stream> stream = (Supplier<Stream>) Arrays.stream(data).flatMapToDouble(Arrays::stream);
double max = stream.max().getAsDouble();
double min = stream.min().getAsDouble();
不起作用,并且
Supplier<DoubleStream>
不起作用以太。我设法使其与
Supplier<DoubleStream> stream = () -> Arrays.stream(t).flatMapToDouble(Arrays::stream);
OptionalDouble max = stream.get().max();
OptionalDouble min = stream.get().min();
但是为什么流中的值变成OptionalDouble?
最佳答案
将DoubleStream
转换为Supplier<DoubleStream>
不会使DoubleStream
成为Supplier<DoubleStream>
。
您需要一个lambda表达式() -> stream
来形成流的提供者:
Supplier<DoubleStream> supplier = () -> Arrays.stream(data).flatMapToDouble(Arrays::stream);
然后可以通过以下方式确定最大值:
double max = supplier.get().max().orElse(Double.MIN_VALUE);
// where Double.MIN_VALUE can be any other default 'double' value if max is not present
因为
max()
上的DoubleStream
返回OptionalDouble
。