我有一个枚举 Permission
对我的应用程序很重要的安全权限。在数据库中,用户可能具有与我的应用程序无关的其他权限。从数据库读取用户时,我得到一个 List<String>
我想建立一个 List<Permission>
,忽略那些不是枚举值的字符串。
public enum Permission { ADMIN, USER }
List<String> plaintextAuthorities = List.of("ADMIN","USER","COFFEEMAKER")
List<Permission> appPermissions = plaintextAuthorities.stream()
.map(Permission::valueOf) // this will throw an IllegalArgumentException for 'COFFEEMAKER'
.collect(Collectors.toList());
问题是 map
步骤到达与枚举值不对应的某个字符串时将引发异常。我该怎么办 filter
删除这些值,以便在不抛出异常的情况下悄悄忽略它们?
3条答案
按热度按时间hsvhsicv1#
你可以先对
Permission
将常量枚举到Set
然后在你的filter
用于筛选无效值的 predicate 。然后使用.map
运算符将枚举常量从字符串表示形式解码回来,仅用于有效值。下面是它的样子。不过,最好还是声明一个名为
isValid
在枚举类型中,以便给定一个字符串值,用户可以检查它是否表示有效的枚举常量。下面是它的样子。现在您的客户端代码应该如下所示:
lokaqttq2#
您可以将名称保留在枚举本身中(作为
Map
):然后简单地做:
ogsagwnx3#
拉文德拉和尤金都给出了很好的答案。我自己的答案不那么优雅,而且速度可能较慢,但它确实有一个优点:我可以实现它,而不必修改enum类。在调用类中,我添加了一个方法:
并在流表达式中添加了一个“过滤器”: