Iterating Over Enum Values in Java

2025年3月26日 | 阅读 3 分钟

枚举(Enum是一种独特的 Java 数据类型。枚举是一组连接在一起的常量,例如一周中的几天或方向。枚举用于提供类型安全性,从而降低错误率。这是它的主要优点之一。使用枚举通常涉及遍历其值。

在本节中,我们将讨论在Java 中遍历枚举值的各种方法,包括代码示例和每种策略的解释。

Day.java

在此示例中,Day 是一个枚举类型,具有七个值,代表一周中的七天。

迭代枚举值

在 Java 中有几种遍历枚举值的方法

  1. 使用 values() 方法
  2. 使用 for-each 循环
  3. 使用 EnumSet 进行迭代
  4. 使用 Streams

1. 使用 values() 方法

values() 方法由编译器为 Java 中的每个枚举隐式声明。此方法返回一个包含枚举所有常量的数组,其顺序与声明顺序相同。

示例

输出

 
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY   

在上面的代码中,我们对 Day 枚举调用 values() 方法以获取其所有常量的数组,然后使用for-each 循环进行迭代。

2. 使用 for-each 循环

由于 values() 方法返回一个数组,我们可以使用 for-each 循环来迭代枚举值,而无需显式将它们存储在数组中。

示例

输出

 
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY   

此方法将 for-each 循环与 values() 函数结合使用。Java 会自动为所有枚举提供 values() 方法,该方法返回枚举中声明的所有常量的数组。在提供的代码中,for (Day day: Day.values()) 生成一个循环,该循环迭代每个 Day 枚举元素。

3. 使用 EnumSet 进行迭代

EnumSet 是一种专为枚举类型设计的特定 Set 实现。这是一种非常简洁有效的处理枚举常量的方法。您可以使用 EnumSet 遍历您生成的枚举值集。

文件名:EnumIterationExample.java

输出

 
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY   

在此示例中,使用 EnumSet.allOf(Day.class) 创建了一个包含所有 Day 枚举常量的 EnumSet。然后,使用 for-each 循环遍历此集合。

4. 利用 Java Streams

由于 Java 8 引入了 Streams API,我们可以利用 Java streams 来迭代枚举值。Java Streams 提供了一种处理基本序列的实用方法,提高了代码的清晰度。

文件名:EnumIterationExample.java

输出

 
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY   

在此示例中,使用 Arrays.stream(Day.values()) 创建枚举值作为流,并使用 forEach(System.out::println) 打印每个值。借助强大的 Streams API,通过将其与过滤、映射等其他函数结合,可以执行更复杂的处理。

结论

在 Java 中,迭代枚举值是一项常见的活动,以不同方式完成时具有多种好处。values() 函数提供了一种获取枚举常量数组的简单技术。使用 for-each 循环可以以简洁易读的方式迭代枚举。

对于执行集合操作,EnumSet 提供了一种简洁高效的 Set 实现,专为枚举设计。Java 8 引入了 Streams API,它提供了一种实用且富有表现力的方法来处理和迭代枚举数据。


下一个主题移入-移出算法