Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.util.stream.Collectors with EnumSet Stream

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.

like image 566
Somasundaram Sekar Avatar asked Feb 03 '16 13:02

Somasundaram Sekar


People also ask

What is Java Util stream collectors?

collect() Method. Stream. collect() is one of the Java 8's Stream API's terminal methods. It allows us to perform mutable fold operations (repackaging elements to some data structures and applying some additional logic, concatenating them, etc.) on data elements held in a Stream instance.

What is EnumSet noneOf?

EnumSet. noneOf(Class elementType ) method in Java is used to create a null set of the type elementType. Syntax: public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType)

How do you make a list object immutable using streams API?

An immutable list is created this way. List<Person> immutableList = Collections. unmodifiableList(new ArrayList<>(persons)); This creates an immutable list since a conversion constructor is being used.

Is toList immutable?

toList() returns an immutable list. So, trying to add a new element to the list will simply lead to UnsupportedOperationException.


1 Answers

You may use toCollection(Supplier):

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

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

like image 72
Tagir Valeev Avatar answered Sep 19 '22 18:09

Tagir Valeev