[英]How to check if a value is present in the list of map using Java8 Stream
我有以下類型的用戶List<Map<String, Object>>
userList
數組
[
{
"type": "OWNER",
"address": "xxxxxxx"
},
{
"type": "LOCATION",
"address": "sssssss"
}
:
]
我想查找列表中的任何 map object 是否包含類型值為"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
上面的代碼工作正常,但誰能告訴我 stream 中是否有其他方法可以有效地檢查這個
你可以做這樣的事情。
userList.forEach(user -> isUserOwner.set(user.entrySet()
.stream()
.filter(m -> m.getKey().contains("type") && ownerList.contains(m.get("type")))
.findAny()
.isPresent()
);
m.get() 是安全的,因為 && 的 RHS 僅在 LHS 為真時才被評估。
如果您只需要查找其中一個元素是所有者還是管理員,則可以使用以下命令:
boolean containsOwnerOrAdmin = users.stream()
.map(a -> a.get("type"))
.filter(Objects::nonNull)
.anyMatch(type -> ("OWNER".equals(type) || "ADMIN".equals(type)));
此循環遍歷列表中的每個 map,獲取鍵為“type”的項目,並將過濾掉任何 null 值,然后它將檢查任何結果對象是否等於 OWNER 或 ADMIN。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.