gpt4 book ai didi

java - 在 Arrays.reduce(...) 中调用对象方法

转载 作者:太空狗 更新时间:2023-10-29 22:51:41 25 4
gpt4 key购买 nike

我有以下3个文件,

A.java:

class A {

private float b;

public A(float b) {
this.b = b;
}

public float getB() {
return b;
}

}

C.java:

import java.util.Arrays;

class C {

private A[] d;
private int i = 0;

public C() {
d = new A[2];
}

public float totalB() {
return Arrays.stream(d).reduce((e, f) -> e.getB() + f.getB()).get();
}

public void addB(A b) {
d[i++] = b;
}

}

D.java:

class D {

public static void main(String[] args) {
C c = new C();
c.addB(new A(3));
c.addB(new A(5));
System.out.println(c.totalB())
}

}

我期待 D.java 中的最后一行输出 8,但是我得到了这个错误:

错误:类型不兼容:lambda 表达式中的错误返回类型
返回 Arrays.stream(d).reduce((e, f) -> e.getB() + f.getB()).get();
^
float 不能转换为 A
为什么会这样?我看不到我在哪里将 float 转换为对象 A。

最佳答案

我更喜欢使用“求和”方法,因为它比一般的 reduce 模式更具可读性。即

return (float)Arrays.stream(d)
.mapToDouble(A::getB)
.sum();

与您的 Arrays.stream(d).reduce(...)...

方法相比,这是一种更加惯用、可读和高效的方法

关于java - 在 Arrays.reduce(...) 中调用对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53321133/

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