我希望根据条件返回流的值。以下仅作为示例,我想将任何苹果映射到
Food.APPLE
:public enum Food {
APPLE, APPLE2, APPLE3, BANANA, PINEAPPLE, CUCUMBER;
private static final Food[] APPLES = new Food[] {APPLE, APPLE2, APPLE3};
//java7
public Food fromValue(String value) {
for (Food type : Food.values()) {
if (type.name().equalsIgnoreCase(value)) {
return ArrayUtils.contains(APPLES, type) ? APPLE : type;
}
}
return null;
}
//java8: how to include the array check for APPLES?
public Food fromValue(String value) {
return Arrays.stream(Food.values()).
filter(type -> type.name().equalsIgnoreCase(value))
.findFirst()
.orElse(null);
}
}
如何将三元条件包含在流中?
map
。 - Alexis C..map(type -> ArrayUtils.contains(APPLES, type) ? APPLE : type)
?如果是这样,并且这是最佳解决方案,你可以将其添加为答案。 - membersoundprivate static final HashSet<String> APPLES = new HashSet<>(Arrays.asList("apple", "apple2", "apple3"));
和public static Food fromValue(String value) { return APPLES.contains(value.toLowerCase()) ? APPLE : null; }
怎么样?时间复杂度是常数级别,而且需要编写的代码更少。 - Alexis C.