带有EnumSet Stream的java.util.stream.Collectors

时间:2016-02-03 13:23:41

标签: java java-8 java-stream enumset

我试图用代替位掩码代码

public static Set<Amenities> fromBitFlags(int bitFlag) {
    return ALL_OPTS.stream().filter(a -> (a.ameityId & bitFlag) > 0).collect(Collectors.toSet());
}

我想返回EnumSet而不是简单的集合(不要因为转换而放弃EnumSet&#39;实用性)。

需要有关如何创建自定义收集器以收集EnumSet的一些说明。

1 个答案:

答案 0 :(得分:55)

您可以使用toCollection(Supplier)

return ALL_OPTS.stream().filter(a -> (a.ameityId & bitFlag) > 0)
               .collect(Collectors.toCollection(() -> EnumSet.noneOf(Amenities.class)));

toCollection方法接收一个lambda,它应该创建一个空集合来存储结果。在这里,我们使用EnumSet调用创建空EnumSet.noneOf。请注意,对于EnumSet,您必须始终指定(隐式或显式)枚举此设置。