2017-05-28 81 views
5

我有一個任務寫一個Enum「Weekdays」,它的常量有多個參數。

是否枚舉類型有一個簡短的方式來遍歷其屬性的值(1,2,3,4,5,6,7 - 從我的代碼)或我必須寫另一個數據類型在哪裏存儲請求的數據?
這是我的代碼:如何遍歷一個枚舉的int值?

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 

回答

2

您可以通過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()); 
    } 
} 
+0

非常感謝,這真的有幫助! –