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());
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
