巧用Java List.removeAll()方法判定列表中元素

2021-05-01  本文已影响0人  deniro

假设我们有这样一个需求,需要判定配置的 OAuth2 授权类型,是否都在有效范围内。OAuth2 的授权类型只能是这五种:"refresh_token",
"password", "client_credentials", "authorization_code", "implicit",因为用户可以配置的值可能不在这五种授权类型中,所以需要判定。

removeAll(Collection<?>c)方法用于从列表中移除指定 collection 中包含的所有元素,我们可以利用这个方法来进行判定。

首先定义支持的授权类型:

    /**
     * 支持的授权类型
     */
    public static final List<String> GRANT_TYPES = Arrays.asList(new String[]{"refresh_token",
            "password", "client_credentials", "authorization_code", "implicit"});

接着把用户所传入的授权类型放入新的列表 temp,然后使用removeAll() 移除掉支持的授权类型,如果列表 temp 不为空,则所以存在超出范围的授权类型,因此直接抛出异常:

            List<String> temp = new ArrayList<>(grantTypes);
            temp.removeAll(GRANT_TYPES);
            if (!temp.isEmpty()) {
                throw new IllegalArgumentException("OAuths2 账户名 [" + name + "] " +
                        "下的授权类型只能是这些类型:" + GRANT_TYPES);
            }

上一篇下一篇

猜你喜欢

热点阅读