我已将列表定义为:
List<Entry<String, Integer>> list
它有字符串的计数。我想迭代列表并打印所有计数为1的字符串/键。
这就是我的尝试:
for (int i=0;i<list.size();i++) {
if(list.get(i) == 1){
System.out.println(list(i));
}
}
我得到“不兼容的操作数类型Map.Entry和int”
答案 0 :(得分:6)
您可以使用“{foreach”类型的for
循环轻松完成此操作:
for (Map.Entry<String,Integer> entry : list) {
if (entry.getValue() == 1) {
System.out.println(entry);
}
}
我们的想法是完全跳过索引,并使用Java的内置迭代功能来缩短代码。
答案 1 :(得分:2)
如果您必须使用List<Entry<String, Integer>>
...
您从列表中检索了Entry<String, Integer>
,但是您将其与1
进行了比较。您需要更进一步,从Integer
检索Entry
,大概是getValue()
。
if(list.get(i).getValue() == 1){
此外,list(i)
将无法编译。您可能需要声明一个新变量来保存list.get(i)
的结果,这样您就不必在同一条目上两次调用get
。
答案 2 :(得分:1)
“不兼容的操作数类型Map.Entry和int”
那是因为您要将Map.Entry
引用与int
进行比较。
您需要将List
的每个元素作为Entry
并在value
条件比较中使用其if
属性
for (int i=0;i<list.size();i++) {
Entry<String, Integer> e = list.get(i);
if(e.getValue() == 1){
System.out.println(e);
}
}
我不知道为什么你有List<Entry>
,但是可能有更好的方法来迭代Entry
元素,即。 Iterator
。
答案 3 :(得分:1)
您有Map.Entry对象列表。您可以使用以下代码迭代列表。
for (Map.Entry<String, Integer> entry:list) {
if(entry.getValue() == 1){
System.out.println("key":+entry.getKey());
System.out.println("value":+entry.getValue());
}
}