使用HashMap Iterator

Mic*_*ell 0 java iterator arraylist hashmap

我有两种方法来遍历包含键(String)和值(Arraylist)的哈希映射,并将Arraylists中的所有值添加到单个Arraylist中.

方法一不起作用,所以我创建了方法二,修复了问题,但我不确定为什么方法一不起作用.有人可以解释为什么方法二有效,方法一无效?

方法1

public ArrayList<Person> getPeopleList() 
{
    Iterator<ArrayList<Person>> iter = people.values().iterator();

    ArrayList<Person> allPersons = new ArrayList<>();
    while (iter.hasNext()) 
    {
        for (int i = 0; i < iter.next().size(); i++) 
        {
            allPersons.add(iter.next().get(i));
        }

    }
    return allPersons;
}
Run Code Online (Sandbox Code Playgroud)

方法2

public ArrayList<Person> getPeopleList() 
{
    Iterator<ArrayList<Person>> iter = people.values().iterator();

    ArrayList<Person> allPersons = new ArrayList<>();

    ArrayList<Person> persons;
    while (iter.hasNext()) 
    {
        persons = iter.next();
        for (Person p : persons) 
        {
            allPersons.add(p);
        }

    }
    return allPersons;
}
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 5

for (int i = 0; i < iter.next().size(); i++) 
Run Code Online (Sandbox Code Playgroud)

这将调用next()for循环的每次迭代.您需要调用一次,并将结果存储在变量中.请注意,List有一个addAll()方法,使得for循环无用.

使用流,您的整个代码可以减少到

return map.values().stream().flatMap(List::stream).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)