java.util.stream.Collectors с EnumSet Stream
Я пытаюсь использовать вместо битовой маски ниже код
public static Set<Amenities> fromBitFlags(int bitFlag) {
return ALL_OPTS.stream().filter(a -> (a.ameityId & bitFlag) > 0).collect(Collectors.toSet());
}
Я хотел бы вернуть EnumSet вместо простого набора (не хочу терять полезность EnumSet только из-за приведения).
Нужны некоторые указания о том, как создать пользовательский коллектор для сбора EnumSet.
1 ответ
Решение
Вы можете использовать toCollection(Supplier)
:
return ALL_OPTS.stream().filter(a -> (a.ameityId & bitFlag) > 0)
.collect(Collectors.toCollection(() -> EnumSet.noneOf(Amenities.class)));
toCollection
Метод получает лямбду, которая должна создать пустую коллекцию для хранения результата. Здесь мы создаем пустой EnumSet
с помощью EnumSet.noneOf
вызов. Обратите внимание, что для EnumSet
Вы должны всегда указывать (неявно или явно), для какого перечисления этот набор.