java.util.stream.Collectors 使用 EnumSet 流
java.util.stream.Collectors with EnumSet Stream
我正在尝试使用以下代码代替位掩码
public static Set<Amenities> fromBitFlags(int bitFlag) {
return ALL_OPTS.stream().filter(a -> (a.ameityId & bitFlag) > 0).collect(Collectors.toSet());
}
我想要 return EnumSet 而不是普通集(不想因为转换而失去 EnumSet 的实用性)。
需要一些关于如何创建自定义收集器来收集 EnumSet 的指导。
您可以使用 toCollection(Supplier)
:
return ALL_OPTS.stream().filter(a -> (a.ameityId & bitFlag) > 0)
.collect(Collectors.toCollection(() -> EnumSet.noneOf(Amenities.class)));
toCollection
方法接收一个 lambda,它应该创建一个空集合来存储结果。这里我们使用 EnumSet.noneOf
调用创建空的 EnumSet
。请注意,对于 EnumSet
,您必须始终指定(隐式或显式)此设置用于哪个枚举。
我正在尝试使用以下代码代替位掩码
public static Set<Amenities> fromBitFlags(int bitFlag) {
return ALL_OPTS.stream().filter(a -> (a.ameityId & bitFlag) > 0).collect(Collectors.toSet());
}
我想要 return EnumSet 而不是普通集(不想因为转换而失去 EnumSet 的实用性)。
需要一些关于如何创建自定义收集器来收集 EnumSet 的指导。
您可以使用 toCollection(Supplier)
:
return ALL_OPTS.stream().filter(a -> (a.ameityId & bitFlag) > 0)
.collect(Collectors.toCollection(() -> EnumSet.noneOf(Amenities.class)));
toCollection
方法接收一个 lambda,它应该创建一个空集合来存储结果。这里我们使用 EnumSet.noneOf
调用创建空的 EnumSet
。请注意,对于 EnumSet
,您必须始终指定(隐式或显式)此设置用于哪个枚举。