【发布时间】:2015-03-25 12:51:09
【问题描述】:
我想根据条件返回流的值。仅以以下为例,我想将任何苹果映射到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里面的条件。 -
@AlexisC。好的,谢谢,您的意思可能是
.map(type -> ArrayUtils.contains(APPLES, type) ? APPLE : type)?如果是这样,并且这是最好的解决方案,您可以将其添加为答案。 -
那么像
private 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; }这样的东西呢?恒定的复杂性时间和更少的代码编写。 -
啊,不完全一样。但是您的问题可以简化为:stackoverflow.com/questions/27807232/…。我的建议是在那里使用地图。
标签: java enums java-8 java-stream