java.util.stream.Collectors with EnumSet Stream

2022-09-01 01:56:48

I'm trying to use in place of bitmask below is the code

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

I would like to return EnumSet instead of a plain set(dont want to loose out on EnumSet's usefulness just because of casting).

Need some directions on how to create a Custom Collector to collect EnumSet.


答案 1

You may use toCollection(Supplier):

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

The method receives a lambda which should create an empty collection to store the result. Here we create empty using call. Note that for you must always specify (implicitly or explicitly) which enum is this set for.toCollectionEnumSetEnumSet.noneOfEnumSet


答案 2

推荐