You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从枚举类型的ArrayList中计算积分总值?

计算ArrayList中Herbs枚举的points总值

问题修正说明

你当前的代码存在两处错误:

  1. herbs是ArrayList<Herbs>实例,没有values()方法——values()是枚举类Herbs的静态方法,用于获取枚举的所有常量,并非集合类方法。
  2. Arrays.asList()返回的是List类型,不能直接赋值给ArrayList变量(无需强制转换,也没必要这么做)。

实现方案

方法1:用Java Stream的reduce(对应JavaScript的reduce逻辑)

Java 8及以上支持的Stream API,reduce方法和JS的reduce逻辑完全匹配,适合快速实现累加:

public int getTotalPoints(ArrayList<Herbs> herbs) {
    return herbs.stream()
                .mapToInt(Herbs::getPoints) // 将每个Herbs对象转换为对应的points值
                .reduce(0, Integer::sum); // 从0开始累加所有points
}

更简洁的简化写法(直接用sum替代reduce):

public int getTotalPoints(ArrayList<Herbs> herbs) {
    return herbs.stream()
                .mapToInt(Herbs::getPoints)
                .sum();
}

方法2:传统for循环(适合新手理解底层逻辑)

如果还没学习Stream API,用基础循环遍历累加也能实现:

public int getTotalPoints(ArrayList<Herbs> herbs) {
    int total = 0;
    for (Herbs herb : herbs) {
        total += herb.getPoints();
    }
    return total;
}

方法3:forEach结合Lambda表达式

也可以用forEach遍历完成累加:

public int getTotalPoints(ArrayList<Herbs> herbs) {
    int[] total = {0}; // Lambda中无法修改局部变量,用数组间接实现
    herbs.forEach(herb -> total[0] += herb.getPoints());
    return total[0];
}

测试验证

用你的示例ArrayList测试,会输出预期的70:

ArrayList<Herbs> herbs = new ArrayList<>(Arrays.asList(Herbs.OLD_SPICE, Herbs.PURPLE_LOTUS));
System.out.println(getTotalPoints(herbs)); // 输出70

内容的提问来源于stack exchange,提问作者cetins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:57:18