我是Java 8的Lambda表达式新手,我想阐述以下内容: 我有一个二维数组,我想在我的应用程序代码中多次迭代该数组并对其中的项目进行处理。在使用Lambda表达式之前,我会执行以下操作:
public static abstract class BlaBlaIterator {
private final BlaBla[][] blabla;
public BlaBlaIterator(final BlaBla[][] blabla) {
this.blabla = blabla;
}
public void iterate() {
final int size = blabla.length;
for (int x = 0; x < size; x++) {
for (int y = 0; y < size; y++) {
final BlaBla bla = blabla[x][y];
iterateAction(x, y, bla, bla == null);
}
}
}
public abstract void iterateAction(int x, int y, BlaBla bla, boolean isNull);
}
然后
BlaBla[][] blabla = ...
new BlaBlaIterator(blabla) {
@Override
public void iterateAction(final int x, final int y, final BlaBla bla, final boolean isNull) {
//...
}
}.iterate();
关键是:我需要访问当前的x/y并获取像isNull这样计算出来的东西。
现在我想要做的是将其转换为lambda表达式。我想写出类似于以下内容:
BlaBla[] blabla = ...
blabla.stream().forEach((x, y, blabla, isNull) -> ... );
我可以通过以下方式从二维数组中获取流
Arrays.stream(field).flatMap(x -> Arrays.stream(x))
但是,如果我这样做就会失去x/y信息,无法传递诸如isNull之类的计算结果。我该怎么做呢?
blabla[0][0]
到最后一个元素的序列无法与索引对分离。 - laune