Мне нужно получить список пользователей с определенной ролью.Пользовательский объект содержит набор ролей с идентификатором и именем роли в виде строки.Пример 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"
}
]
}
]
Я могу добиться этого с помощью цикла if внутри цикла for.У пользователя есть только одна роль (и по некоторым причинам я должен использовать 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);
}
}
Есть ли другой, более простой способ, как лямбда-фильтр для фильтрации набора внутри списка?Я пробовал это решение лямбда-список Java 8 внутри фильтра списка оно фильтрует, но оно также дублирует объект.