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

如何统计枚举对象在对应类型数组中的出现次数,是否要用equals方法

枚举比较规则说明

Java 枚举的所有实例都是全局单例的,因此比较枚举值时,使用==和调用equals()效果完全相同,没有强制要求必须使用equals()。

  • 补充细节:Enum 类重写的equals()底层就是基于==实现,两种写法都合法。使用==还能避免调用方为 null 时触发的空指针异常,更推荐使用。

统计功能实现

首先你提供的枚举定义多写了一个多余的右大括号,修正后的正确定义如下:

enum Food {
    apples, oranges, grapes
}

如果代码中提前静态导入了枚举值(import static 包名.Food.*),就可以直接写apples、grapes无需加类前缀。

实现方式1:普通遍历(兼容所有 Java 版本)

import java.util.HashMap;
import java.util.Map;

public class FoodCountDemo {
    public static void main(String[] args) {
        Food[] arr = {Food.apples, Food.apples, Food.grapes, Food.oranges, Food.apples};
        Map<Food, Integer> countResult = new HashMap<>();

        for (Food item : arr) {
            // 仅统计目标枚举值
            if (item == Food.apples || item == Food.grapes) {
                countResult.put(item, countResult.getOrDefault(item, 0) + 1);
            }
        }

        // 输出结果
        System.out.println("apples 出现次数:" + countResult.getOrDefault(Food.apples, 0));
        System.out.println("grapes 出现次数:" + countResult.getOrDefault(Food.grapes, 0));
    }
}

运行输出:

apples 出现次数:3
grapes 出现次数:1

实现方式2:Stream 流实现(Java 8+ 可用,写法更简洁)

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

public class FoodCountStreamDemo {
    public static void main(String[] args) {
        Food[] arr = {Food.apples, Food.apples, Food.grapes, Food.oranges, Food.apples};
        Map<Food, Long> countResult = Arrays.stream(arr)
                .filter(item -> item == Food.apples || item == Food.grapes)
                .collect(Collectors.groupingBy(item -> item, Collectors.counting()));

        System.out.println("apples 出现次数:" + countResult.getOrDefault(Food.apples, 0L));
        System.out.println("grapes 出现次数:" + countResult.getOrDefault(Food.grapes, 0L));
    }
}

运行结果和第一种实现完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:15:04