Java:在Java中迭代列表的列表

Java:在Java中迭代列表的列表,java,list,iterator,Java,List,Iterator,我想知道迭代器是如何工作的: List<List<Integer>> res; for (List l : res) { } for (Integer a : res) { } 列表res; 对于(列表l:res){ } for(整数a:res){ } 哪一个是对的?我很困惑….您有一个列表列表,因此如果希望迭代所有内部列表的所有整数,则需要一个嵌套循环: for (List<Integer> l : res) { for (Integer a

我想知道迭代器是如何工作的:

List<List<Integer>> res;
for (List l : res) {
}

for (Integer a : res) {
}
列表res;
对于(列表l:res){
}
for(整数a:res){
}

哪一个是对的?我很困惑….

您有一个列表列表,因此如果希望迭代所有内部列表的所有整数,则需要一个嵌套循环:

for (List<Integer> l : res) {
    for (Integer a : l) {
    }
}
for(列表l:res){
for(整数a:l){
}
}

或者,您可以使用流,然后平面映射到整数来迭代所有整数。例如,要查找所有整数的和,请执行以下操作:

res.stream().flatMapToInt(List::stream).sum();

值得学习循环的流。

如果您想使用迭代器,可以执行以下操作

    Iterator<List<Integer>> itr = res.iterator();
    while (itr.hasNext()) {
        Iterator<Integer> itr1 = itr.next().iterator();
        while(itr1.hasNext()) {
            System.out.println(itr1.next());
        }
    }
Iterator itr=res.Iterator();
while(itr.hasNext()){
迭代器itr1=itr.next().Iterator();
while(itr1.hasNext()){
System.out.println(itr1.next());
}
}

好吧,这两个选项中哪一个不会给你一个编译错误?我知道了,第二个是错误的。@DavidWallace谢谢你,但你明白为什么吗?因为迭代器只遍历res的每个元素,在这种情况下,元素是list而不是integer。我说得对吗@戴维德瓦莱塞是的,可以。无论何时使用
列表
,都应该指定type参数-这允许编译器检查是否将正确类型的内容放入
列表
,并取出正确类型的内容。看看@Eran的答案,找到正确的方法。使用stream有什么好处?streams有很多好处。它们(可以说)使含义更清楚:取一个列表流,映射到列表中的一个整数流,对整数求和。它们还允许您在不改变任何逻辑的情况下切换到并行流,从而利用多处理器。