使用HashMap Iterator

时间:2017-04-18 16:03:33

标签: java arraylist hashmap iterator

我有两种方法来遍历包含键(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;
}

方法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;
}

1 个答案:

答案 0 :(得分:5)

for (int i = 0; i < iter.next().size(); i++) 

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

使用流,您的整个代码可以缩减为

return map.values().stream().flatMap(List::stream).collect(Collectors.toList());