繁体   English   中英

Java 8 lambda表达式求值

[英]Java 8 lambda expression evaluation

我有一个类似于以下方法:

public double[] foo(double[] doubleArray) { 
    DoubleStream stream = Arrays.stream(doubleArray);

    return stream.map(s -> s / stream.sum()).toArray();
}

这种方法的复杂性是什么? DoubleStreamsum方法执行多少次? 一次或O(n)次, n = doubleArray.length

此代码将引发异常,因为您不能多次使用相同的Stream。 您只能在Stream上执行一个终端操作。

如果您将代码更改为:

public double[] foo(double[] doubleArray) { 
    return Arrays.stream(doubleArray).map(s -> s / Arrays.stream(doubleArray).sum()).toArray();
}

它会工作,但运行时间将是二次的( O(n^2) ),因为总和将被计算n次。

更好的方法是只计算一次总和:

public double[] foo(double[] doubleArray) { 
    double sum = Arrays.stream(doubleArray).sum();
    return Arrays.stream(doubleArray).map(s -> s / sum).toArray();
}

这将以线性时间运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM