检查Set中是否存在使用流的字符串值

时间:2016-10-19 10:29:27

标签: java java-8 java-stream

public class Role implements Serializable {

/** other fields */


    private Set<Privilege> privileges;


    /* setters and getters */

}

//特权类

public class Privilege implements Serializable {


@Column(name = "name", length = 255)
    private String name;

}

跟我有角色数据;

Set<Role> roles = SecuUtil.getUser().getRoles();

我如何检查In特权是否包含name =&#34; test&#34;并返回true或false

如何在Java 8中使用stream,最有效率

我们如何搜索集合内的集合。

对于一组我可以这样做

roles.stream().anyMatch(str -> str.getPrivileges().equals("test"));

1 个答案:

答案 0 :(得分:1)

如果我已正确解密您的问题,您的用户具有一组角色,并且您想要检查该集是否包含任何包含名称为"test"的权限的角色。

如果这是你想要的,你可以通过将角色/特权平​​面映射到一组特权来实现。

if (roles.stream()
     .flatMap(role -> role.getPrivileges().stream())
     .anyMatch(pr -> "test".equals(pr.getName()))) {
  // do stuff
}

这是有效的&#34;只要它找到一个匹配的特权就会停止。