如何通过int值迭代枚举?

时间:2017-05-28 17:08:22

标签: java enums

我有一个编写Enum“Weekdays”的作业,其中常数有多个参数。

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

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 

1 个答案:

答案 0 :(得分:2)

您可以按values()获取所有枚举值,并将其映射到低于Weekdays::getNumber的{​​{1}}过滤值:

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]
    }
}