如何将地图中的值与阈值进行比较并将大于最小阈值的值放入集合中

Posted

技术标签:

【中文标题】如何将地图中的值与阈值进行比较并将大于最小阈值的值放入集合中【英文标题】:How to compare values in a map with a threshold and put the values greater than the minimum threshold in a set 【发布时间】:2019-09-23 05:28:27 【问题描述】:

我有一个包含字符串键和整数值的映射,我试图将这些值与阈值(例如 40)进行比较,并将所有值大于阈值的键打印到一组中。这是我的代码和我得到的错误。我是java新手

    int m = 40;

    Set<Map.Entry<String, Integer>> set = map.entrySet();


    System.out.println();
    Iterator<Map.Entry<String, Integer>> i = set.iterator();

    while (i.hasNext() )  
        Map.Entry e = i.next(); 

    if(e.getValue() > m)  
        set.add(e.getKey());
    
    System.out.println("Set of local file names and malware score : "+ i.next()); 
    

错误:

no suitable method found for add(Object)
                        set.add(e.getKey());
                           ^
    method Collection.add(Entry<String,Integer>) is not applicable
      (argument mismatch; Object cannot be converted to Entry<String,Integer>)
    method Set.add(Entry<String,Integer>) is not applicable
      (argument mismatch; Object cannot be converted to Entry<String,Integer>)
2 errors

【问题讨论】:

【参考方案1】:

您正在尝试将键(String 类型)添加到条目 Set(其中包含 Map.Entry&lt;String,Integer&gt; 类型的元素)。这就是错误的原因。

但是,即使类型匹配,您也不应该修改 Map 的条目 Set(除非您也想修改底层 Map)。

您应该创建一个单独的Set 来存储相关密钥:

Set<String> set = new HashSet<>();

System.out.println();
Iterator<Map.Entry<String, Integer>> i = map.entrySet().iterator();

while (i.hasNext() )  
    Map.Entry<String,Integer> e = i.next(); 

    if(e.getValue() > m)  
        set.add(e.getKey());
    

我从循环中删除了您的 println 语句,因为它在同一迭代中第二次推进 Iterator,这是错误的。

【讨论】:

以上是关于如何将地图中的值与阈值进行比较并将大于最小阈值的值放入集合中的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中,如何找到排序列表中第一个大于阈值的值的索引?

如何将char数组中的值与另一个char进行比较

你将如何抑制低于阈值的值并用 Python 中的字符串替换

pandas筛选dataframe数据:指定一个数据列的值不等于某个固定值,而且另外一个数据列的值大于某一阈值

决策树。选择分割对象的阈值

如何将二维数组中的值与 GoLang 中的一维数组中的值进行比较?