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

Другие вопросы по тегам