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

在HashMap中查找匹配的键和值

云航
2023-03-14

在我的程序中,我有类似测试#6的错误:leastcommon({})exp。异常:第16行堆栈跟踪上的IllegalArgumentExceptionyour exceptionNoSuchElementException:NoSuchElementException LestCommon,第16行结果:fail

public static int leastCommon(Map<String, Integer> map) {
    Map<Integer, Integer> result = new TreeMap<Integer, Integer>();
    Iterator<String> i = map.keySet().iterator();
    
    while (i.hasNext()) {
        int num = map.get(i.next());
        if (result.containsKey(num)) {
            result.put(num, result.get(num) + 1);
        } else {
            result.put(num, 1);
        }
    }
    
    Set<Integer> setKey = result.keySet();
    Iterator<Integer> i1 = setKey.iterator();
    int min = i1.next();
    
    while(i1.hasNext()) {
        int current = i1.next();
        if (result.get(current) < result.get(min)) {
            min = current;
        }
    }
    
    return min;

}

如何用我的程序修正?

共有1个答案

谭敏学
2023-03-14

当输入映射为空且min=i1.next()试图查找某些内容时,似乎会出现此问题。

这可以通过简单地检查/断言输入参数来解决,并且可能值得返回integer,而不是取消装箱到基元int:

public static Integer leastCommon(Map<String, Integer> map) {
    if (null == map || map.isEmpty()) {
        return null; // or throw IllegalArgumentException
    }
    // ... keep the rest of the code
}

但是,使用流API解决此任务会更简单,使用Collectors.GroupingByCollectors.counting计算输入映射中每个值的频率,并查找频率较低的条目:

java prettyprint-override">public static Integer leastCommon(Map<String, Integer> map) {
    if (null == map) return null;
    return map.values().stream()
              .collect(Collectors.groupingBy(x -> x, Collectors.counting()))
              .entrySet().stream()
              .min(Map.Entry.comparingByValue())
              .map(Map.Entry::getKey)
              .orElse(null);
}
 类似资料:
  • 我的任务是使用HashMaps和set制作同义词词典。我的主要方法中有以下代码: 插入同义词和键的一种方法: 显示ArrayList的一种方法: 我想找到一个单词的所有同义词,例如单词“camin”。我写了下面的方法来做这件事,但是它不起作用,它返回一组空的键: 问题是在这里面,如果: 是数组列表和字符串之间的比较。我不知道如何纠正它。

  • 问题内容: 我有这样的桌子设计 并希望通过查询返回属于部门a和b的所有person_id。我认为这可能与 但不能完全弄清楚。有人知道我该怎么做吗? 编辑:我想我可以执行以下操作。但这似乎是一种hack。 问题答案: 注意:仅当一个人可以多次成为同一部门的成员时,才需要使用DISTINCT。

  • 这个问题是由打字错误或无法再复制的问题引起的。虽然这里可能有类似的问题,但这一问题的解决方式不太可能帮助未来的读者。 我试图在HashMap中找到字符串,该字符串对于给定的单词有一个子字符串。在我的代码中,输出是“1 2 3 4”(所有索引)。输出应为“2 3”。

  • 本文向大家介绍查找图的匹配数,包括了查找图的匹配数的使用技巧和注意事项,需要的朋友参考一下 问题陈述 下图的匹配数字是多少? 解 顶点数= 9 我们只能匹配8个顶点。 匹配号码为4。

  • 在我的一个程序中,我有以下方法,允许用户在ArrayList中输入与笔记本电脑关联的唯一ID。 所需输出如下: 如果用户输入的ID与ArrayList中的ID匹配,笔记本电脑及其规格将打印出来 如果ID不匹配,它将打印出“无效ID” 我非常接近实现这一目标;然而,我只能弄清楚如何让它打印出是否匹配列表中的每台笔记本电脑。例如,如果用户输入的ID与列表中三台笔记本电脑中的一台匹配,它将按如下方式打印

  • 我很难在hashmap中的字符串数组中找到一个元素。我有一个字符串,它确实在这个String[]里面,但执行以下操作不起作用。 我的目标是在找到值的地方找到我的HashMap的对应键。 以我的地图示例为例: 如果搜索字符串,我希望有一个新的字符串数组,它将是: 我也尝试使用,但没有成功。 我做错了吗?谢谢!