我需要检索具有特定角色的用户列表。用户对象包含一组id和角色名称为字符串的角色。
用户JSON示例:
[
{
"id": "test-id-user2",
"email": "user2@email.com",
"password": "$2a$04$JodczCrLPGYA1cCvtAWZoe47qhiBIMNjSexRFwCLevzRJQQSqZvaO",
"firstName": "Test2",
"lastName": "User2",
"enabled": true,
"confirmationToken": "0123token0123",
"location": {
"id": 1,
"name": "West Vinewood"
},
"roles": [
{
"id": 1,
"role": "ROLE_USER"
}
]
},
{
"id": "test-id-admin",
"email": "admin@email.com",
"password": "$2a$04$Ll0WUAuU1p.sjqH.g.f03eHcfS8ox1Pen9tYk8/JdWlgfBr71nNO.",
"firstName": "AdminTest",
"lastName": null,
"enabled": true,
"confirmationToken": null,
"location": null,
"roles": [
{
"id": 2,
"role": "ROLE_ADMIN"
}
]
}
]
我可以通过在for循环中使用if循环来实现这一点。用户只有一个角色(出于某些原因,我必须为此使用set):
List<User> member = new ArrayList<>();
for (User user : allUsers) {
Set<UserRole> roles = user.getRoles();
if (roles.iterator().next().getRole().equals("ROLE_USER")) {
member.add(user);
}
}
有没有其他更简单的方法像lambda一样过滤列表中的集合?我尝试过这个解决方案
Java 8 lambda list inside list filter
它会过滤,但也会复制对象。