我知道我是否使用:

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

07-24 13:29