1

我已将列表定义为:

  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”

4

4 回答 4

6

您可以使用“foreach”类型的for循环更轻松地完成此操作,如下所示:

for (Map.Entry<String,Integer> entry : list) {
    if (entry.getValue() == 1) {
        System.out.println(entry);
    }
}

这个想法是完全跳过索引,并使用 Java 的内置迭代功能来缩短您的代码。

于 2013-10-02T17:13:51.660 回答
2

如果必须使用List<Entry<String, Integer>>...

Entry<String, Integer>从列表中检索了您的,但您将其与1. 您需要更进一步并Integer从 中检索Entry,大概是getValue()

if(list.get(i).getValue() == 1){

此外,list(i)不会编译。您可能需要声明一个新变量来保存结果,list.get(i)这样您就不必get在同一个条目上调用两次。

于 2013-10-02T17:11:42.337 回答
1

“不兼容的操作数类型 Map.Entry 和 int”

那是因为您将Map.Entry参考与int.

您需要获取Listas 的每个元素并在条件比较中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

于 2013-10-02T17:11:45.743 回答
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());
    }
}
于 2013-10-02T17:14:47.463 回答