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