编辑:在这里找到解决方案:http ://www.dreamsyssoft.com/java-8-lambda-tutorial/map-reduce-tutorial.php
我正在关注本教程:
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html
当我到达使用 sum 和 average 函数的部分时,我收到以下错误:
UserAverageTest.java:68: error: cannot find symbol
double average = users.parallelStream().filter(u -> u.age > 0).map(u -> u.age).average().getAsDouble();
^
symbol: method average()
location: interface Stream<Double>
调用 sum 时出现同样的错误。由于某种原因,它似乎使用的是 Stream 而不是 DoubleStream 类。我正在使用教程中链接的启用了 lambda 的最新 jdk。
有没有人也遇到过这个问题并且能够解决它?
这是一个重现问题的简单示例:
class User {
double age;
public User(double age) { this.age = age; }
double getAge() { return age; }
}
public static void main(String[] args) throws Exception {
List<User> users = Arrays.asList(new User(10), new User(20), new User(30));
double average = users.parallelStream()
.filter(u -> u.age > 0)
.map(u -> u.age)
.average()
.getAsDouble();
}