簡體   English   中英

如何使用 Java8 Stream 檢查 map 列表中是否存在值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM