当前位置: 首页 > 知识库问答 >
问题:

如何将来自数组列表的给定键与HashMap键进行比较?

卜盛
2023-03-14

在我的WebApplication中,我必须检查来自RequestBody的许多传入查询参数。为了不在每个方法中编写相同的代码,我想编写一个返回一个布尔值的函数。当接收到所有必需的参数并且entrySet的值不是null时,方法应该返回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,要么我总是得到一个空的返回。

共有1个答案

仲孙疏珂
2023-03-14

我可能错了,但据我所知,您希望验证以下条件:

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

您可以使用类似于以下内容的内容:

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

因此,我们迭代entrySet,检查entry键是否属于定义的集合,以及值是否不为NULL。下面是一个更详细的例子:

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);

请注意,我正在使用集合工厂方法创建maplistsetsetsetsetsetset已经添加到

至于您的代码,您将始终得到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. 

希望你觉得这有用。

 类似资料:
  • 我有一个字符串数组,由整数作为键标识。我想按键对这个HashMap进行排序。

  • 如何比较两个列表是否相等验证数据来自Excel工作表。我需要验证两个列表是否相同,并且列表中没有附加元素或缺少元素。我不需要对列表进行排序。打印输出CAGID Excel data=CAGID Web列表

  • 我正在制作一个输血游戏。我有2个数组列表。一个有献血者的血型和姓名,第二个有接受者的血型和姓名。所有的名字我都会得到用户的输入并将它们存储在一个数组中(接受者数组列表更大)。 我不知道如何使用布尔2D数组将两个数组列表进行比较(应该返回true或false)。例如,在所有捐赠者和接受者输入姓名和血型后,程序应该告诉他们是否匹配。 我知道下面的代码是错误的,但我不知道怎么做。

  • 背景:https://dev.to/carey/java-map-keys-should-always-be-comparable-2c1b 我想要达到的目标: 查找使用HashMap的代码 我被困在第二步 你知道如何得到泛型类的类型吗?谢谢你的支持。

  • 我正在尝试编写一个日历。我将我的约会保存在另一个ArrayList中的两个不同的ArrayList中。 字符串(Subject,Place,People)进入另一个ArrayList=arstr中的第一个ArrayList 整数(Date和Time)进入另一个ArrayList=arInt中的第二个ArrayList 当我创建约会时,我希望根据日期对其进行排序。所以如果我想添加一个新的约会,它应该

  • 问题内容: 我有以下 我想将此日期与今天的日期进行比较(即我想知道这是今天之前还是今天之前) 我需要使用什么功能? 问题答案: 将其转换为时间值 给你几秒钟 将检查是否已在最后一天之内。