40

我正在尝试使用下面的位掩码代替代码

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

我想返回 EnumSet 而不是一个普通的集合(不想因为强制转换而放弃 EnumSet 的用处)。

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

4

1 回答 1

79

您可以使用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您必须始终指定(隐式或显式)为此设置的枚举。

于 2016-02-03T13:29:48.477 回答