如何从枚举类型的ArrayList中计算积分总值?
计算ArrayList中Herbs枚举的points总值
问题修正说明
你当前的代码存在两处错误:
herbs是ArrayList<Herbs>实例,没有values()方法——values()是枚举类Herbs的静态方法,用于获取枚举的所有常量,并非集合类方法。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
相关产品推荐
相关产品推荐

