Java 遍历枚举值

Java 遍历枚举值

枚举是Java中数据类型,用于将一组预定义常量赋给变量。本文介绍几种方式遍历枚举值。

1. 定义枚举

首先我们定义枚举,简单示例如下:

public enum DaysOfWeekEnum {
    SUNDAY,
    MONDAY,
    TUESDAY, 
    WEDNESDAY, 
    THURSDAY, 
    FRIDAY, 
    SATURDAY
}

Enum类型没有提供迭代方法,如forEach() 或 iterator(), 我们可以使用其values()方法的返回值。

2. 遍历枚举

2.1 使用for循环

首先使用for循环实现:

for (DaysOfWeekEnum day : DaysOfWeekEnum.values()) { 
    System.out.println(day); 
}

2.2 使用流方式

我们也可以使用java.util.Stream,我们可以在枚举值上执行相应操作创建流:

Stream.of(DaysOfWeekEnum.values());

或者:

Arrays.stream(DaysOfWeekEnum.values());

这里扩展上面的枚举类,使用流方式实现:

public enum DaysOfWeekEnum {
    
    SUNDAY("off"), 
    MONDAY("working"), 
    TUESDAY("working"), 
    WEDNESDAY("working"), 
    THURSDAY("working"), 
    FRIDAY("working"), 
    SATURDAY("off");
 
    private String typeOfDay;
 
    DaysOfWeekEnum(String typeOfDay) {
        this.typeOfDay = typeOfDay;
    }
	
    // standard getters and setters 
 
    public static Stream<DaysOfWeekEnum> stream() {
        return Stream.Of(DaysOfWeekEnum.values()); 
    }
}

现在写示例按顺序打印非工作日:

public class EnumStreamExample {
 
    public static void main() {
        DaysOfWeekEnum.stream()
        .filter(d -> d.getTypeOfDay().equals("off"))
        .forEach(System.out::println);
    }
}

输出:

SUNDAY
SATURDAY

2.3 使用forEach

forEach方法是Java8开始引入,所有集合类都有其实现。为了在枚举中使用,首先需要转换枚举为集合子类。我们可以使用Arrays.asList方法生成ArrayList,然后使用forEach方法:

Arrays.asList(DaysOfWeekEnum.values())
  .forEach(day -> System.out.println(day));

2.4 使用EnumSet

EnumSet是针对枚举类型的特殊实现:

EnumSet.allOf(DaysOfWeekEnum.class)
  .forEach(day -> System.out.println(day));

2.5 使用枚举类型的ArrayList

我们可以往List中增加枚举值,这样可以按任何顺序操作List:

List<DaysOfWeekEnum> days = new ArrayList<>();
days.add(DaysOfWeekEnum.FRIDAY);
days.add(DaysOfWeekEnum.SATURDAY);
days.add(DaysOfWeekEnum.SUNDAY);
for (DaysOfWeekEnum day : days) {
    System.out.println(day);
}
days.remove(DaysOfWeekEnum.SATURDAY);
if (!days.contains(DaysOfWeekEnum.SATURDAY)) {
    System.out.println("Saturday is no longer in the list");
}
for (DaysOfWeekEnum day : days) {
    System.out.println(day);
}

也可以使用 Arrays.asList()方法创建ArrayList。但ArrayList底层的枚举值数组值是不可变的,因此不能对List进行增加或删除项,否则会抛出异常 UnsupportedOperationException:

List<DaysOfWeekEnum> days = Arrays.asList(DaysOfWeekEnum.values());
days.remove(0);

3. 总结

我们看到使用多种方式迭代枚举,forEach,Stream以及for等。如果需要执行并行操作可以使用stream方式,否则几种方式没有太多差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值