gpt4 book ai didi

java - 按对象集的值过滤对象列表

转载 作者:行者123 更新时间:2023-11-30 10:15:46 24 4
gpt4 key购买 nike

我需要检索具有特定角色的用户列表。用户对象包含一组具有 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它会过滤,但也会复制对象。

最佳答案

可以使用流 API 按如下方式完成:

allUsers.stream()           
.filter(u -> u.getRoles().iterator().next().getRole().equals("ROLE_USER"))
.collect(Collectors.toCollection(ArrayList::new));

关于java - 按对象集的值过滤对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50339346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com