Som*_*kar 28 java enumset java-8 java-stream
我试图用代替位掩码来代码
public static Set<Amenities> fromBitFlags(int bitFlag) {
return ALL_OPTS.stream().filter(a -> (a.ameityId & bitFlag) > 0).collect(Collectors.toSet());
}
Run Code Online (Sandbox Code Playgroud)
我想返回EnumSet而不是简单的集合(不要因为转换而放弃EnumSet的实用性).
需要一些有关如何创建自定义收集器以收集EnumSet的说明.
Tag*_*eev 59
你可以使用toCollection(Supplier):
return ALL_OPTS.stream().filter(a -> (a.ameityId & bitFlag) > 0)
.collect(Collectors.toCollection(() -> EnumSet.noneOf(Amenities.class)));
Run Code Online (Sandbox Code Playgroud)
该toCollection方法接收一个lambda,它应该创建一个空集合来存储结果.这里我们EnumSet使用EnumSet.noneOfcall 创建空.请注意,EnumSet您必须始终指定(隐式或显式)此枚举的枚举.