【发布时间】:2022-01-17 20:08:47
【问题描述】:
我有以下userList 类型的List<Map<String, Object>> json 数组
[
{
"type": "OWNER",
"address": "xxxxxxx"
},
{
"type": "LOCATION",
"address": "sssssss"
}
:
]
我想查找列表中的任何地图对象是否包含类型值为 "OWNER" 或 "ADMIN"。我试过他下面的代码
List<String> ownerList = new ArrayList<>();
ownerList.add("OWNER");
ownerList.add("ADMIN");
AtomicBoolean isUserOwner = new AtomicBoolean(false);
userList.forEach(user -> isUserOwner.set(user.entrySet()
.stream()
.filter(m -> m.getKey().contains("type"))
.anyMatch(map -> ownerList.contains(valueOf(map.getValue())))));
isUserOwner.get();// ---> get the boolean value which shows if it is either OWNER or ADMIN
上面的代码工作正常,但是谁能告诉我流中是否有其他方法可以有效地检查这个
【问题讨论】:
-
上面的代码与列表中负责
setting 变量值的最后一个映射一起工作正常。如果是这种情况,您实际上不需要遍历所有Maps。boolean isUSerOwner = userList.get(userList.size()-1).entrySet() .stream() .filter(m -> m.getKey().contains("type")) .anyMatch(map -> ownerList.contains(String.valueOf(map.getValue())));之类的东西另外,using a Set<String> ownerList会有所帮助,
标签: list dictionary java-8 stream