我有一项任务是编写一个枚举“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/