猿问
如何为锯齿状数组 java 覆盖 next()?
我有一个锯齿状的数组。如何覆盖
next()
,以便我可以逐步获取其元素?
蛊毒传说
浏览 198
回答 3
3回答
四季花海
这可能是您问题的错误答案。在这种情况下,我会删除它,但也许您可以将它用于您想要实现的目标:int[][] it = {{1,2}, {3,4,5}};OfInt iterator = Arrays.stream(it).flatMapToInt(x -> IntStream.of(x)).iterator();iterator.forEachRemaining((IntConsumer) System.out::print);流式传输锯齿状数组,将其平面映射为一个IntStream,然后用它做你想做的事。在这个例子中,我获取了迭代器,但你可能只想要:Arrays.stream(it).flatMapToInt(x -> IntStream.of(x)).forEach((IntConsumer) System.out::print); 在forEach你可以做你需要的,或使用其他一些方法IntStream
0
0
0
绝地无双
公共类 IteratorFor2DArray 实现 Iterator {private int size;private int i = 0;private int j = 0;private int[][] values = new int[i][j];private int position = 0;public IteratorFor2DArray(int[][] values) { this.values = values; this.size = countOfElements(values);}private int countOfElements(int[][] values) { int count = 0; for (int[] row : values) { count += row.length; } return count;}@Overridepublic boolean hasNext() { return position < size;}@Overridepublic Integer next() { if (position >= size) { throw new NoSuchElementException(); } int element = values[i][j]; position++; j++; while (i < values.length && j >= values[i].length) { j = 0; i++; } return element;}}
0
0
0
largeQ
我还找到了另一种方法:public class IteratorFor2DArray implements Iterator { private int[][] data; private int i, j; public IteratorFor2DArray(int[][] data) { this.data = data; } @Override public Integer next() { if (!hasNext()) { throw new NoSuchElementException(); } int element = data[i][j]; j++; while (i < data.length && j >= data[i].length) { j = 0; i++; } return element; } @Override public boolean hasNext() { return (i < data.length && j < data[i].length); }}
0
0
0
随时随地看视频
慕课网APP
相关分类
Python
我要回答