加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 枚举的通用过滤器

发布时间:2020-12-15 08:28:38 所属栏目:Java 来源:网络整理
导读:以下是我的课 public final class Test {enum Animal {DOG,CAT};enum COLOR {RED,YELLOW};class Meaningless { String animal,color;}public void filter(ListMeaningless meaninglesses){ meaninglesses.stream() .filter(meaningless - { try { Animal.val
以下是我的课

public final class Test {
enum Animal {DOG,CAT};
enum COLOR {RED,YELLOW};

class Meaningless {
    String animal,color;
}
public void filter(List<Meaningless> meaninglesses){
    meaninglesses.stream()
            .filter(meaningless -> {
                try {
                    Animal.valueOf(meaningless.animal);
                    return true;
                }catch(Exception e){
                    return false;
                }
            })
            .filter(meaningless -> {
                try {
                    COLOR.valueOf(meaningless.color);
                    return true;
                }catch(Exception e){
                    return false;
                }
            })
            .collect(Collectors.toList());
}

}

过滤方法的2次迭代实质上过滤掉了无效的枚举类型.如何从中删除代码重复?检查应该是通用的,这样我就不必在引入新的枚举时更改isValidEnum.

理想情况下,我想做点什么

meaninglesses.stream()
            .filter(meaningless -> isValidEnum(meaningless.animal,Animal.class))
            .filter(meaningless -> isValidEnum(meaningless.color,COLOR.class))

解决方法

以下实用方法应该在这里诀窍,

public static <E extends Enum<E>> boolean validateEnum(Class<E> clazz,String s) {
    return EnumSet.allOf(clazz).stream().anyMatch(e -> e.name().equals(s));
}

以下是您的客户端代码在实践中的外观,

boolean isValid = validateEnum(Animal.class,"DOG");

最后,回到你的上下文,它应该是这样的.

meaninglesses.stream()
    .filter(meaningless -> validateEnum(Animal.class,meaningless.animal))
    .filter(meaningless -> validateEnum(COLOR.class,meaningless.color))
    .collect(Collectors.toList());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读