我需要在我的方法中迭代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);
}
}
}
}
答案 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));
}