gpt4 book ai didi

java - 使用 Iterator 迭代 2D 数组,就好像它是 1D 数组一样

转载 作者:行者123 更新时间:2023-11-30 02:40:02 26 4
gpt4 key购买 nike

我是 Java 初学者,我必须从 Iterator<Iterator<Integer>> 等接收值。 。例如,我们可能有:

{{1, 2}, {3, 4}, {5, 6}}

next()的结果应该是1 。如果我们尝试 next()再一次-2 ,然后 - 3 , 4等等。就像从一维数组中一一获取值一样,但是从二维数组中获取值。我们不应该复制任何东西。所以,我在下面写了一些糟糕的代码:

public class IteratorNext {

private Iterator<Iterator<Integer>> values = null;
private Iterator<Integer> current;

public IteratorNext(Iterator<Iterator<Integer>> iterator) {
this.values = iterator;
}

public int next() throws NoSuchElementException {
current = values.next();
if (!current.hasNext()) {
values.next();
}
if (!values.hasNext() && !current.hasNext()) {
throw new NoSuchElementException("Reached end");
}
return current.next();
}
}

该代码不正确,因为 next() 的结果是 1 ,然后3 ,然后5因为这里有异常(exception)。如何解决这个问题?

最佳答案

如果您使用Java-8,您可以利用flatMapToInt函数将二维数组转换为一维数组(array2d 可以假定为对 2D 数组的引用):

Arrays.stream(array2d).flatMapToInt(Arrays::stream).forEach(System.out::println);

如果您想坚持您的解决方案,您需要修改您的 next 方法,如下所示:

public int next() throws NoSuchElementException {
int result = -1;
//Are we already iterating one of the second dimensions?
if(current!=null && current.hasNext()) {
//get the next element from the second dimension.
result = current.next();
} else if(values != null && values.hasNext()) {
//get the next second dimension
current = values.next();
if (current.hasNext()) {
//get the next element from the second dimension
result = current.next();
}
} else {
//we have iterated all the second dimensions
throw new NoSuchElementException("Reached end");
}

return result;

}

关于java - 使用 Iterator 迭代 2D 数组,就好像它是 1D 数组一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42038195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com