如何将地图中的值与阈值进行比较并将大于最小阈值的值放入集合中
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<String,Integer>
类型的元素)。这就是错误的原因。
但是,即使类型匹配,您也不应该修改 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 中,如何找到排序列表中第一个大于阈值的值的索引?