Java Intstream 获取空值多维数组的索引

vai*_*hav 3 java functional-programming java-stream

Java Instream 我需要具有空值的二维数组中元素的索引。我可以使用我在下面做的一维数组,它有效:

  IntStream.range(0, myArr.length)
                .filter(x -> myArr[x] == null)
                .findFirst()
                .orElse(-1);
Run Code Online (Sandbox Code Playgroud)

我可以使用 Streams over Arrays 和 flatmap 来获取对象,但我的目的是获取ijmyArr[i][j]值为空。

Hol*_*ger 5

您可以使用一个long值来携带两个int值:

long both = LongStream.range(0, array.length)
    .flatMap(i -> LongStream.range(0, array[(int)i].length).map(j -> j << 32 | i))
    .filter(l -> array[(int)l][(int)(l>>32)] == null)
    .findFirst().orElse(-1);

int j = (int) (both >> 32), i = (int)both;

if(j >= 0) {
    System.out.println("found ("+i+", "+j+")  "+array[i][j]);
}
Run Code Online (Sandbox Code Playgroud)

但这并不比例如简单

int i, j;
search: {
    for(i = 0; i < array.length; i++) {
        var sub = array[i];
        for(j = 0; j < sub.length; j++)
            if(sub[j] == null) break search;
    }
    j = -1;
}

if(j >= 0) {
    System.out.println("found ("+i+", "+j+")  "+array[i][j]);
}
Run Code Online (Sandbox Code Playgroud)