gpt4 book ai didi

未找到 Java 8 总和和总数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:00 26 4
gpt4 key购买 nike

编辑:在此处找到解决方案: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();
}

最佳答案

您需要更改 map 函数以返回图元流,例如:

double average = users.parallelStream().filter(u -> u.age > 0).mapToDouble(u -> u.age).average().getAsDouble();
^^^^^^^^

根本原因是 Stream<Double> (由 map 返回)不是 DoubleStream (由 mapToDouble 返回)。只有后者有average和sum方法。

关于未找到 Java 8 总和和总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18177918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com