循环遍历枚举的最佳方法是什么。
我有一个枚举方向,我想循环遍历它。目前我在枚举中实现了下一个返回下一个值的方法,我只是想知道是否有更好的方法/内置支持循环遍历。
当前代码
enum Direction {
east, north, west, south;
Direction next() {
switch (this) {
case east:
return north;
case north:
return west;
case west:
return south;
case south:
return east;
}
return null;
}
}
答案 0 :(得分:8)
实现循环Iterator
:
enum Direction implements Iterable<Direction> {
east, north, west, south;
@Override
public Iterator<Direction> iterator() {
return new DirectionIterator();
}
class DirectionIterator implements Iterator<Direction> {
Direction next = Direction.this;
@Override
public Direction next() {
try {
return next;
} finally {
next = values()[(next.ordinal() + 1) % values().length];
}
}
@Override
public boolean hasNext() {
return true;
}
@Override
public void remove() {
throw new NotImplementedException();
}
}
}
用法:
public static void main(String[] args) {
Iterator<Direction> it = Direction.north.iterator();
for (int i = 0; i < 10; i++)
System.out.println(it.next());
}
输出:
north
west
south
east
north
west
south
east
north
west
答案 1 :(得分:6)
转换为int(通过ordinal()
),循环并转换回枚举(通过values[i]
)。
像这样:
Direction next() {
return values()[(ordinal() + 1) % values().length];
}
答案 2 :(得分:1)
您可以使用枚举值为其分配整数值以循环它们的事实。