gpt4 book ai didi

java - 如何将数组列表中的给定键与 HashMap 键进行比较?

转载 作者:行者123 更新时间:2023-11-30 05:38:00 24 4
gpt4 key购买 nike

在我的 WebApplication 中,我必须检查来自 requestBody 的许多传入查询参数。为了不在每个方法中编写相同的代码,我想编写一个返回 boolean 值的函数。当接收到所有必需的参数并且entrySet的值不为空时,该方法应该返回true(否则为false),我可以稍后在程序中使用传入的查询参数。

因此我将所有传入的参数打包到一个 HashMap 中。另外,我在方法中放入了一个特定的列表,它提供了检查所需的参数(键)。

queryParams 的示例映射:

Map queryParams = new HashMap();

queryParams.put("id", "1");
queryParams.put("name", "Jane");
queryParams.put("lastname", "Doe");

数组示例:

String[] keys = {"id", "name", "lastname"};

方法的最新版本:



public static Boolean checkRequestParams(Request request, String[] keys) {
Map params = (JsonUtil.fromJson(request.body(), HashMap.class));

Iterator it = params.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
for (int i = 0; i < keys.length; i++) {
if (pair.getKey().equals(keys[i])) {
return true;
}

}

数组提供了客户端发送的 QueryParams 的键。不,我想比较它们并检查 Hashmap 中的键是否等于数组中给定的键,以及 Map 中键的值是否不为空。

我尝试了很多变体。要么我得到 nullPointerExceptions,要么我总是得到 null 返回。

最佳答案

我可能是错的,但据我了解,您想要验证以下条件:

  1. HashMap 键必须属于以下关键字列表{"id", "name", "lastname"}
  2. HashMap 中的任何值都不应等于 null。

您可能会使用类似的东西:

map.entrySet()
.stream()
.allMatch(entry -> keys.contains(entry.getKey()) && entry.getValue() != null)

因此,我们迭代entrySet 并检查entry key 是否属于定义的集合以及value 是否不为空。这是一个更详细的示例:

Set<String> keys = Set.of("id", "name", "lastname");
Map<String,List<Integer>> map = Map.of("id", List.of(1,2,3), "name", List.of(4,5,6));

map.entrySet()
.stream()
.allMatch(entry -> keys.contains(entry.getKey()) && entry.getValue() != null);

Map<String,List<Integer>> map1 = Map.of("id", List.of(1,2,3), "not in the keys", List.of(4,5,6));
map1.entrySet()
.stream()
.allMatch(entry -> keys.contains(entry.getKey()) && entry.getValue() != null);

请注意,我使用集合工厂方法来创建已添加到 java-9 中的 MapListSet,但是Stream api 自 java-8 起可用。

对于你的代码,你总是会得到true,因为只要有一个满足条件的entrySet,该方法就会返回结果。

for (int i = 0; i < keys.length; i++) {
if (pair.getKey().equals(keys[i])) {
return true; // one single match found return true.
}

}

您可以尝试反转条件并在不匹配时立即返回 false。

for (int i = 0; i < keys.length; i++) {
if (!pair.getKey().equals(keys[i]) || pair.getValue() == null) {
return false; // mismatch found, doesn't need to verify
// remaining pairs.
}

}
return true; // all pairs satisfy the condition.

我希望您觉得这很有用。

关于java - 如何将数组列表中的给定键与 HashMap 键进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56241294/

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