web-dev-qa-db-ja.com

EnumSetストリームを含むjava.util.stream.Collectors

以下のビットマスクの代わりに使用しようとしています

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

単純なセットの代わりにEnumSetを返したい(キャストのためにEnumSetの有用性を失いたくない)。

EnumSetを収集するためのカスタムコレクターの作成方法に関する指示が必要です。

32

toCollection(Supplier) を使用できます:

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

toCollectionメソッドは、結果を格納するための空のコレクションを作成する必要があるラムダを受け取ります。ここでは、EnumSet.noneOf呼び出しを使用して空のEnumSetを作成します。 EnumSetの場合、この列挙型を設定する列挙型を常に(暗黙的または明示的に)指定する必要があることに注意してください。

57
Tagir Valeev