如何为锯齿状数组 java 覆盖 next()?
Posted
技术标签:
【中文标题】如何为锯齿状数组 java 覆盖 next()?【英文标题】:How can I override next() for jagged array java? 【发布时间】:2019-02-21 09:56:33 【问题描述】:我有一个锯齿状数组。
如何覆盖next()
,以便逐步获取其元素?
【问题讨论】:
您可以从了解迭代器内部的工作原理开始。 你能告诉我们你尝试了什么吗?在 *** 上,人们希望看到已经做出的努力并能够帮助您找到解决方案。 数组没有实例方法。您无法覆盖不存在的内容... 例如,我有一个数组:int it = 1, 2, 3, 4, 5。我需要覆盖 next(),以逐步获得 1、2、3、4 和 5。在我想看到的输出中:it.next() - 我得到 1,it.next() - 我得到 2 等等。 正如@Turing85 提到的,数组没有迭代器,因此无法覆盖 next()。但是你可以从here开始修改二维锯齿数组的代码 【参考方案1】:这可能是您问题的错误答案。在这种情况下,我会删除它,但也许你可以将它用于你想要实现的目标:
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
的一些其他方法
【讨论】:
【参考方案2】:谢谢大家的回答,我在俄语 *** 中找到了答案: https://ru.***.com/questions/867881/java-iterator-%D0%B4%D0%BB%D1%8F-%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0
公共类 IteratorFor2DArray 实现迭代器
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;
【讨论】:
【参考方案3】:我还找到了另一种方法:
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);
【讨论】:
以上是关于如何为锯齿状数组 java 覆盖 next()?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 electron + react js + next 进行生产构建