以使用lambda表达式

以使用lambda表达式

我有一个Item[] items,其中包含一些有关自身的基本统计信息。

public float getAttackDamage() {
    float bonus = 0;
    for(int i = 0 ; i < items.length; i++){
        if(items[i] != null){
            bonus += items[i].getAttackDamage();
        }
    }
    return baseAttackDamage + attackDamageScaling * level + bonus;
}

上面的代码是我当前如何遍历字符项并将其getAttackDamage()应用于返回结果的方式。

有什么办法可以改写它以使用lambda表达式吗?我尝试了以下方法:
public float getAttackDamage() {
    float bonus = 0;
    Arrays.stream(items).forEach(i -> bonus += i.getAttackDamage());
    return baseAttackDamage + attackDamageScaling * level + bonus;
}

但这没有用(编译器错误)。
这可能吗?

最佳答案

是的,您可能会遇到以下情况:

double bonus = Arrays.stream(items)
                     .filter(Objects::nonNull)
                     .mapToDouble(Item::getAttackDamage)
                     .sum();

您应该记住forEach可能不是您要调用的方法。它破坏了函数式编程(请参阅Brian Goetz的注释)。在此代码中,将创建每个项目的流。非空元素将被过滤并映射到对应于攻击伤害的 double 值。

关于java - 我可以使用lambda表达式来累加变量中的总和吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33845589/

10-09 08:41