3 回答
TA貢獻1811條經驗 獲得超5個贊
這可能是您問題的錯誤答案。在這種情況下,我會刪除它,但也許您可以將它用于您想要實現的目標:
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
TA貢獻1946條經驗 獲得超4個贊
公共類 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;
}
@Override
public boolean hasNext() {
return position < size;
}
@Override
public 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;
}
}
TA貢獻2039條經驗 獲得超8個贊
我還找到了另一種方法:
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);
}
}
添加回答
舉報
