Java 什么';iterator=null和hasnext=false之间的区别是什么?
我正在编写一个代码来展平2d列表,比如Java 什么';iterator=null和hasnext=false之间的区别是什么?,java,list,null,iterator,listiterator,java-stream,java-8,Java,List,Null,Iterator,Listiterator,Java Stream,Java 8,我正在编写一个代码来展平2d列表,比如[[1,2],[3],[4,5,6]。我希望它们在一个列表中,如[1,2,3,4,5,6]。 当我想检查coliter是否在一行的末尾时,我想让它们换到下一行 while ((colIter == null || !colIter.hasNext()) && rowIter.hasNext()) 当我这样做的时候,我在想colIter==null和之间有什么区别!colIter.hasNext() 专用迭代器rowIter; 专用迭代器co
[[1,2],[3],[4,5,6]
。我希望它们在一个列表中,如[1,2,3,4,5,6]
。
当我想检查coliter是否在一行的末尾时,我想让它们换到下一行
while ((colIter == null || !colIter.hasNext()) && rowIter.hasNext())
当我这样做的时候,我在想colIter==null
和之间有什么区别!colIter.hasNext()
专用迭代器rowIter;
专用迭代器colIter;
公共解决方案2(列表2){
rowIter=vec2d.iterator();
colIter=Collections.emptyIterator();
}
@凌驾
公共整数next(){
返回colIter.next();
}
@凌驾
公共布尔hasNext(){
while((colIter==null | | |!colIter.hasNext())和&rowIter.hasNext()){
colIter=rowIter.next().iterator();
}
return colIter!=null&&colIter.hasNext();
}
@凌驾
公共空间删除(){
while(colIter==null&&rowIter.hasNext()){
colIter=rowIter.next().iterator();
if(colIter!=null){
colIter.remove();
}
}
}
Q:我正在编写一个代码来展平2d列表,如[[1,2],[3],[4,5,6]
。我希望它们位于一个列表中,如[1,2,3,4,5,6]
A:为简洁起见,请使用使结构平坦的功能:
List<Integer> list = vec2d.stream().flatMap(List::stream).collect(Collectors.toList());
List List=vec2d.stream().flatMap(List::stream).collect(Collectors.toList());
在版本之前,对于此问题,每个用法都有足够的可用性
Q:…colIter==null和!colIter.hasNext()
之间有什么区别
A:colIter==null检查迭代器本身是否为null。默认情况下,从任何现有集合返回迭代器都不会产生类似的迭代器
colIter.hasNext()
是从迭代器调用的一个方法,如果迭代包含更多元素,则根据其返回值true
,这意味着后续调用将返回一个元素,并且如果使用嵌套列表,则不会抛出NoSuchElementException
[ [1,2], [3], [4,5,6] ]
…你可以用另一种方式来思考
0: [1, 2]
1: [3]
2: [4, 5, 6]
也就是说,由于列表的嵌套属性,列表具有二维表示形式。第0行包含值1和2,第1行包含值3,第2行包含值4、5和6
当你写作时
colIter == null || !colIter.hasNext()) && rowIter.hasNext()
您要检查的是:
- 有专栏吗?
- 如果有,,
- 我们是否已经用尽了列迭代,我们是否有更多的东西要从行中读取
0: [1, 2]
1: []
2: [3, 4, 5]
对于第1行,肯定有一个列,但我们没有任何值要处理,而且还有其他事情要做,所以我们可以越过这个记录
如果我们在嵌套列表的末尾,那么我希望调用
colIter.next()
抛出一个NoTouchElementException
而不是返回null
。您可能需要对此进行研究。一个是检查对象是否存在,另一个是从对象获取信息?如果这真的是您的全部要求,那么您的问题中有很多无关信息。您可能应该将其关闭o更清楚一点。在上面的代码中,colIter==null在任何情况下都不能为true,因为您总是将其设置为非null对象。!colIter.hasNext()检查当前的colIter迭代器是否已到达列表的末尾,并且没有任何下一个元素。建议streams与讨论无关。让他们在依赖语法糖之前找出如何执行该操作。我已经仔细阅读了您的答案,并对我的评估保持坚定。非常好的解释!谢谢!
0: [1, 2]
1: []
2: [3, 4, 5]