当前位置: 首页 > 面试题库 >

查找地图是否包含列表/可迭代项中的任何键的有效方法

段干子晋
2023-03-14
问题内容

我需要检查映射是否包含列表中的任何键,如果包含,则返回第一个匹配值。想到的幼稚方法是在两个嵌套循环中进行:

Map<String, String> fields = new HashMap<String, String>();
fields.put("a", "value a");
fields.put("z", "value z");
String[] candidates = "a|b|c|d".split("|");
for (String key : fields.keySet()){
    for (String candidate : candidates) {
        if (key.equals(candidate)){
            return fields.get(key);
        }
    }
}

有没有一种更好,更有效的方法,可能是一种依靠Java标准库的方法?


问题答案:

当然是这样的:

for (String candidate : candidates) {
     String result = fields.get(key);
     if (result != null) {
         return result;
     }
}

上面每个候选键仅执行 一次 映射查找。它避免了对存在性与提取进行单独的测试,因为提取不存在的密钥只会给您一个null。注意(感谢 Slanec
),对于此解决方案,有效密钥的null值与不存在的密钥是无法区分的。

顺便说一句,我不太明白为什么要执行大小写转换。



 类似资料:
  • 问题内容: 看来在Python中,它适用于任何可迭代的对象: 此行为记录在任何地方吗? 与此形成对比的是,后者仅当也是有效时才起作用。这在文档中有详细说明。 问题答案: 从Guido van Rossum 出发: 它除了也返回外,其工作方式与之相同。我找不到说明此问题的文档。:-( 以下是相关的源代码,摘自: 我提出了一个错误报告来修复此文档:http : //bugs.python.org/is

  • 问题内容: 我有这样的df: 以及物品清单: 我的目标是从中获取至少包含2个元素的所有行。 我想出了以下解决方案: 这给了我我想要的,但是就可伸缩性而言,它可能不是最佳的解决方案。是否有任何“向量化”解决方案?谢谢 问题答案: 我会建立一个Series列表,然后应用vectorized : 它给出了预期的结果:

  • 假设w、x、y和z都可以在列表a中。是否有一个快捷方式来检查它是否只包含x--例如。而不否定其他变量? w、x、y和z都是单个值(不是列表、元组等)。

  • 我在编写查找 MaxHeap 优先级队列是否包含值的方法时遇到问题。 说明如下:如果在队列中找到给定值,包含(E)方法应返回true。它应该使用其私有助手方法递归搜索队列。 这是我目前掌握的情况

  • 问题内容: 我有一个产品ID列表,我想找出哪些订单包含所有这些产品。订单表的结构如下: 显然,我可以使用PHP中的一些循环来做到这一点,但是我想知道是否有一种优雅的方法可以完全在mysql中完成。我理想的幻想查询将是这样的: 有希望还是我应该去阅读托尔金?:)另外,出于好奇,如果不能在mysql中使用,是否还有其他具有此功能的数据库? 问题答案: 你很亲密 关于关系代数中的“出于好奇”问题,这可以

  • 我的怀疑是因为这个问题: https://www.hackerrank.com/challenges/migratory-birds/problem?h_r=next-挑战 我知道可以通过以下方式轻松解决: > 将频率存储在Map中 初始化两个温度变量a、b 启动循环 输入arr包含11个值,1 2 2 2 3 4 5 4 3 4 输出应该是2 说明1 不同类型的鸟类以以下频率出现: 类型1:1