2017-05-28 16 views
5

定数に複数のパラメータが含まれている「平日」の列挙型を作成する割り当てがあります。

Enum型は、プロパティ(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()により、すべての列挙型の値を取得し、userInputより低いWeekdays::getNumberフィルタリング値にマッピングできます。

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

ありがとう、本当に助けて! –

関連する問題