Вы можете сначала кодировать константы перечисления Permission
в Set
строки, а затем использовать это в предикате filter
для фильтрации недопустимых значений. Затем используйте оператор .map
для декодирования констант перечисления обратно из строкового представления только для допустимых значений. Вот как это выглядит.
Set<String> strPermissionSet = Arrays.stream(Permission.values())
.map(Permission::name)
.collect(Collectors.toSet());
Set<Permission> appPermissions = plaintextAuthorities.stream()
.filter(strPermissionSet::contains)
.map(Permission::valueOf)
.collect(Collectors.toSet());
Тем не менее лучше всего объявить в своем типе enum метод stati c с именем isValid
, чтобы при заданном строковом значении пользователь мог проверить, является ли он действительным константа перечисления или нет. Вот как это выглядит.
public enum Permission {
ADMIN, USER;
private static final Set<String> strPermissions =
Arrays.stream(values())
.map(Permission::name)
.collect(Collectors.toSet());
public static boolean isValid(String val) {
return strPermissions.contains(val);
}
}
А теперь ваш клиентский код должен выглядеть так:
Set<Permission> appPermissions = plaintextAuthorities.stream()
.filter(Permission::isValid)
.map(Permission::valueOf)
.collect(Collectors.toSet());