【问题标题】:If HashMap containskey(Any part of a String)如果 HashMap 包含键(字符串的任何部分)
【发布时间】:2019-03-06 19:00:49
【问题描述】:

这个问题听起来有点奇怪,但我可以解释一下: 我有一个用字符串作为键和值填充的​​ HashMap。我有一个字符串。现在我想做这样的事情:

if(myhashmap.containskey(ANY PART OF MY STRING)

喜欢:

String str = "Java is cool!";
[HashMap that contains following : "Java";

我希望我可以检查字符串是否包含某些内容。 也许我可以使用 for 循环来做到这一点,但没有什么像 hashmap.entry 那样。 你会怎么做?

【问题讨论】:

  • 寻找不同的数据结构;在String 的“部分”上使用 for 循环;您的 HashMap 由其中的键的 hashCode() 组织。
  • “任何部分”是什么意思?你的意思是字符串中的任何单词吗?或者任何子字符串?或者是其他东西?例如,如果密钥是"va is co",您是否希望您的代码能够找到它?
  • 你可以迭代 keySet,但听起来你想要一个不同的数据结构

标签: java string if-statement hashmap


【解决方案1】:

您可以遍历地图的键并检查它们是否在字符串中:

String str = "Java is cool!";
Map<String, ...> map = ...;

for (String key : map.keySet()) {
    if (str.contains(key)) {
        ...
    }
}

如果您还需要keyyou can use entrySet 的关联值。

【讨论】:

    【解决方案2】:

    您可以通过流和过滤来做到这一点,这非常实用:)

    Map<String, Integer> map = new HashMap<>();
    map.put("Hello World", 1);
    map.put("Challo World", 2);
    map.put("Hallo World", 3);
    map.put("Hello Universe", 4);
    map.put("Hello Cosmos", 5);
    
    List<Integer> values =
        map.keySet().stream()
           .filter(key -> key.contains("World"))
           .map(map::get)
           .collect(Collectors.toList());
    

    您应该得到一个值为 1、2、3 的 List&lt;Integer&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 2014-05-25
      • 2018-08-21
      相关资源
      最近更新 更多