2017-05-28 23 views
5

Enum "Weekdays" yazmak için, sabitlerin birden fazla parametreye sahip olduğu bir atamam var.

Enum türünün, değerlerinin üzerinde değerlerini belirtmek için kısa bir yolu var mı (1,2,3,4,5,6,7 - kodumdan) veya başka bir veri türü yazmak zorundayım. istenen veri
kodum var That:Bir enum üzerinde int değeriyle yineleme nasıl yapılır?

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

sorun kodu kullanıcı tarafından ayarlanan bir değere üzerinde yineleme zorunda olduğu, bu yüzden sadece sonuna kadar onun başından enum yineleme olamaz.

Düzenleme ben de açıklamıyorsunuz düşünüyorum çünkü: kod kullanıcı tarafından girilen bir int değeri üzerinde yineleme yapmak ve örneğin başka sabitin property- yazdırmak zorundadır
: Kullanıcının giriş 4 olduğunda, program basmalı:

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

cevap

2

Sen values() bütün enum değerlerini almak ve userInput daha düşüktür bir Weekdays::getNumber filtreleme değerlerine onları eşleştirebilirsiniz:

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

verimlilik için, ayrıca statik alanda eşlenen diziyi tutunabileceği:

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

ve gerektiğinde kullanan:

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

DÜZENLEME: Burada, yorumunda ihtiyaçlarınızı yakalandı
gördüğüm çözümdür:

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

Çok teşekkür ederim, bu gerçekten yardımcı oluyor! –

İlgili konular