如何/可以在Java中使用Hashmap为每个循环编写一个?

时间:2018-10-09 11:38:19

标签: java for-loop foreach hashmap

我需要在我的方法中迭代HashMap的每个值,但是在每个循环中它给我带来了语法错误

  

Library.java:12:错误:for-each不适用于表达式类型         for(字串书:图书馆){                           ^必填:数组或java.lang.Iterable找到:HashMap

这是相关代码

public void getFinishedBooks(HashMap<String, Boolean> library)
{
  if(library.size()<1) 
  {
    System.out.println("Library is empty!");
  }
  else 
  {
    for(String book : library)
    {
      if(library.get(book) ==true)
      {
        System.out.println(book);
      }
    }
  }
}

4 个答案:

答案 0 :(得分:4)

您可以遍历一组条目:

for (Entry<String, Boolean> book : library.entrySet()) {
    if (book.getValue()) {
        System.out.println(book.getKey());
    }
}

Map.entrySet()返回Set个条目(java.util.Map.Entry)。每个条目都包含一个带有键及其值的对。

答案 1 :(得分:0)

您可以使用entrySet()。

引用https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

公共集> entrySet() 返回此映射中包含的映射的Set视图。该集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(除非通过迭代器自己的remove操作或通过迭代器返回的映射条目上的setValue操作),则迭代的结果是不确定的。该集合支持元素删除,该元素通过Iterator.remove,Set.remove,removeAll,retainAll和clear操作从映射中删除相应的映射。它不支持add或addAll操作。

答案 2 :(得分:0)

您可以使用以下代码通过java8遍历:

Maven

答案 3 :(得分:0)

您有不同的方法来迭代地图

forEach from Java 8 (效率更高)

library.forEach((k, v) -> System.out.println(v));

每次进入

for (library.Entry<String, Boolean> pair : library.entrySet()) {
    System.out.println(pair.getValue());
}

forEach和keySet

for (String key : library.keySet()) {
    System.out.println(library.get(key));
}