java - 如何通过其 int 值迭代枚举?

标签 java enums

我有一项任务是编写一个枚举“Weekdays”,其中常量具有多个参数。

Enum 类型是否有一种通过属性(1、2、3、4、5、6、7 - 来 self 的代码)迭代其值的简短方法,或者我必须编写另一种数据类型来存储请求的数据?
那是我的代码:

public enum Weekdays {
    MON("Monday", "Mon",1),
    TUE("Tuesday","Tue",2),
    WED("Wednesday","Wed",3),
    THU("Thursday","Thu",4),
    FRI("Friday", "Fri",5),
    SAT("Saturday","Sat",6),
    SUN("Sunday","Sun",7);

     private String fullName;
     private String shortName;
     private int number;

    Weekdays(String fullName, String shortName, int number) {
        this.fullName = fullName;
        this.shortName = shortName;
        this.number = number;
    }

    public String getFullName() {
        return fullName;
    }

    public String getShortName() {
        return shortName;
    }

    public int getNumber() {
        return number;
    }
 }

问题是代码必须遍历用户设置的值,所以我不能只从头到尾遍历枚举。

编辑因为我觉得我没有解释好:
代码必须遍历用户输入的 int 值并打印另一个常量的属性 - 例如:当用户输入为 4 时,程序应打印:

Thursday, Friday, Saturday, Sunday, Monday, Thuesday, Wednesday 

最佳答案

您可以通过 values() 获取所有枚举值并将它们映射到 Weekdays::getNumber 过滤值低于 userInput:

Arrays.stream(Weekdays.values())
      .mapToInt(Weekdays::getNumber)
      .filter(i -> i > userInput)
      .forEach(i -> { /**/ });

为了提高效率,您还可以将映射数组保存在静态字段中:

private static int[] numbers = Arrays.stream(Weekdays.values()).mapToInt(Weekdays::getNumber).toArray();

并在需要时使用它:

public void method(int userInput) {
    // validate userInput
    for (int i = userInput; i < numbers.length; i++) {
        // do sth with numbers[i]
    }
}

编辑:
我在评论中发现了您的要求,这是我看到的解决方案:

public void method(int userInput) {
    // validate userInput
    Weekdays[] values = Weekdays.values();

    for (int i = userInput; i < values.length + userInput; ++i) {
        Weekdays day = values[i % values.length];
        System.out.println(day.getFullName());
    }
}

关于java - 如何通过其 int 值迭代枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44229925/

相关文章:

java - 在 Java 8 中编写以下代码的可能方法

java - Java中通过字段名查找对象的值

java - 如何在java代码中使用S3DistCp

python - 使用枚举时禁用 pylint 警告 E1101

java - 用于设置枚举的字符串值

带有枚举值的 MySQL 查询

java - 如何通过 it 属性为枚举设置一些值

java - 我们如何将字符串从 PEM 格式转换为 DER 格式

java - 如何在 Web 应用程序中高效地搜索大型 XML 文件?

c# - 类型为 List<enum> 的 EF 属性未在 db 中创建