web-dev-qa-db-fra.com

java.util.stream.Collectors avec EnumSet Stream

J'essaye d'utiliser à la place du bitmask ci-dessous le code

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

Je voudrais retourner EnumSet au lieu d'un ensemble simple (ne veux pas perdre l'utilité d'EnumSet juste à cause du casting).

Besoin de quelques instructions sur la façon de créer un collecteur personnalisé pour collecter EnumSet.

32
Somasundaram Sekar

Vous pouvez utiliser toCollection(Supplier) :

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

La méthode toCollection reçoit un lambda qui doit créer une collection vide pour stocker le résultat. Ici, nous créons EnumSet vide en utilisant EnumSet.noneOf appel. Notez que pour EnumSet, vous devez toujours spécifier (implicitement ou explicitement) l'énumération pour laquelle cet ensemble est défini.

57
Tagir Valeev