java - 列表中的 Lambda 表达式不起作用

标签 java lambda java-8

我正在使用 Java 8 开发 Java 应用程序,使用流功能 我有这个 POJO:

public class Authority implements GrantedAuthority {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;


    private final String authority;

    public Authority(String authority) {

        this.authority = authority;
    }


    @Override
    public String getAuthority() {
        return authority;
    }


    @Override
    public String toString() {
        return "Authority [authority=" + authority + "]";
    }
}

public class User implements Serializable, UserDetails {

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        Set<GrantedAuthority> authorities = new HashSet<>();
        userRoles.forEach(ur -> authorities.add(new Authority(ur.getRole().getName())));
        return authorities;
    }

    public boolean isAdmin() {
        return getAuthorities().stream().filter
            (o -> o.getAuthority().equals(RolesEnum.ADMIN)).findFirst().isPresent();
    }
}

我创建了这个 Junit 来检查是否一切正常

  @Test
    public void isAdminTests() {

        User adminUser = UserUtils.createBasicUser("user2@gmail.com", "user2@gmail.com", true);
        Set<UserRole> adminUserRoles = new HashSet<>();
        adminUserRoles.add(new UserRole(adminUser, new Role(RolesEnum.ADMIN)));
        adminUser.getUserRoles().addAll(adminUserRoles);

        System.out.print(adminUser.getAuthorities());

        assertTrue (adminUser.isAdmin()); 

    }

这是控制台中的值:

[Authority [authority=ROLE_ADMIN]]

但是我有一个断言错误

最佳答案

我的猜测是您将权限对象(它是一个字符串 IIRC)与枚举对象进行比较

o.getAuthority().equals(RolesEnum.ADMIN))

你必须比较这两个不同的对象,这样才有可能匹配

你可以试试

o.getAuthority().equals(RolesEnum.ADMIN.name()))

当您可以确保枚举名称始终与角色名称相同时。

关于java - 列表中的 Lambda 表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44288754/

相关文章:

使用控制反转容器的 Java 惰性实例

java - Dagger 不喜欢抛出异常的构造函数

java - 提取字符串中的字符串

Lambda 在初始化之前访问封闭类的最终字段

java - 在 lambda 表达式中使用默认方法

C#自定义数据库引擎,如何实现SQL

c# - 使用条件(三元)运算符分配 lambda 表达式

python - 在函数中使用 lambda

java - 将语言级别设置为java 8会使某些方法消失

java - 从 Optional 流式传输列表