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

Java如何实现接收任意Enum为参数、指定头值返回排序枚举列表的方法

实现方案

核心实现逻辑如下:

  • 先获取目标枚举类的所有枚举常量,保持枚举定义的原生顺序
  • 做入参合法性校验,避免传入不属于当前枚举的头值
  • 定位指定头值在原生枚举序列中的索引位置
  • 按「头值到末尾 + 开头到头值前一位」的顺序拼接得到最终有序列表

完整代码实现:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public static <E extends Enum<E>> List<E> enumHeadAsList(final Class<E> val, final E topValue) {
    // 基础非空校验
    if (val == null || topValue == null) {
        throw new IllegalArgumentException("枚举类和指定头值均不可为null");
    }
    // 获取枚举所有常量,顺序和枚举定义的顺序完全一致
    E[] enumConstants = val.getEnumConstants();
    if (enumConstants == null || enumConstants.length == 0) {
        return Collections.emptyList();
    }
    // 查找指定头值在原生枚举序列中的索引
    int headIndex = -1;
    for (int i = 0; i < enumConstants.length; i++) {
        // 枚举是单例,直接用==比较即可
        if (enumConstants[i] == topValue) {
            headIndex = i;
            break;
        }
    }
    // 校验头值是否属于当前枚举类
    if (headIndex == -1) {
        throw new IllegalArgumentException(String.format("枚举值[%s]不属于枚举类[%s]", 
                topValue.name(), val.getName()));
    }
    
    // 方式1:普通遍历拼接,兼容所有Java版本
    List<E> result = new ArrayList<>(enumConstants.length);
    // 先添加头值到序列末尾的元素
    for (int i = headIndex; i < enumConstants.length; i++) {
        result.add(enumConstants[i]);
    }
    // 再添加序列开头到头值前一位的元素
    for (int i = 0; i < headIndex; i++) {
        result.add(enumConstants[i]);
    }
    return result;

    // 方式2:Java8+ Stream 简化写法,可替换上面的拼接逻辑
    // return Stream.concat(
    //         Arrays.stream(enumConstants, headIndex, enumConstants.length),
    //         Arrays.stream(enumConstants, 0, headIndex)
    // ).collect(Collectors.toList());
}

上述实现完全符合你给出的调用形式,假设BuffType枚举的原生定义顺序为ATK,DEF,SELF,HP,MP,调用enumHeadAsList(BuffType.class, BuffType.SELF)返回的列表顺序为SELF,HP,MP,ATK,DEF。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 16:45:10