Java.util.stream.Collectors с потоком EnumSet

Я пытаюсь использовать вместо битовой маски ниже код

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

Я хотел бы вернуть EnumSet вместо простого набора (не хочу потерять полезность EnumSet только из-за кастинга).

Нужно указать некоторые способы создания Custom Collector для сбора EnumSet.

Ответы

Ответ 1

Вы можете использовать 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 вы всегда должны указывать (неявно или явно), для которого установлено это перечисление.