Java 8 Stream如何判断列表中所有枚举状态为FINISHED或PENDING?
枚举列表多状态全匹配实现
你可以通过在allMatch中指定允许的状态范围,实现判断列表内所有元素均为FINISHED或PENDING的需求,以下是几种实用写法:
写法一:Lambda直接判断
最直观的实现方式,在allMatch的Lambda表达式中直接枚举允许的状态:
if(states.stream().allMatch(status -> status == SomeStatus.FINISHED || status == SomeStatus.PENDING )) { // 执行自定义逻辑 }
写法二:利用集合contains方法
如果允许的状态数量较多,将其存入集合后用contains判断,代码更简洁易维护:
// 建议定义为常量,避免重复创建集合 Set<SomeStatus> ALLOWED_STATUSES = Set.of(SomeStatus.FINISHED, SomeStatus.PENDING); if(states.stream().allMatch(ALLOWED_STATUSES::contains)) { // 执行自定义逻辑 }
写法三:枚举类封装判断方法
若该判断逻辑会多处使用,直接在枚举类中封装方法,代码复用性更高:
public enum SomeStatus { FINISHED, PENDING, EMPTY, STARTED; // 封装状态判断逻辑 public boolean isFinishedOrPending() { return this == FINISHED || this == PENDING; } }
调用时只需引用枚举方法:
if(states.stream().allMatch(SomeStatus::isFinishedOrPending)) { // 执行自定义逻辑 }
内容的提问来源于stack exchange,提问作者N.Rajal
相关产品推荐
相关产品推荐

