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

问题描述 投票:1回答:1

Java Instream,我需要2D数组中具有空值的元素的索引。我可以用对于单维数组,我在下面做了,而且有效:

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

我可以在数组上使用流,并且flatmap可以到达对象,但是我的目的是获取myArr [i] [j]为空的i和j的值。

java functional-programming stream
1个回答
0
投票

您可以使用Stream.iterateflatMap将所有值为null的索引放在SimpleEntry中,其中键是第一个索引,而值是第二个索引:

 Integer[][] integers = {{1, 2, 3, 6}, {4, 5, 6}, {7, 8, null, 11}};
 List<SimpleEntry<Integer, Integer>> collect = 
            Stream.iterate(0, (i) -> i < integers.length, (i) -> ++i)
                .flatMap(i -> IntStream.range(0, integers[i].length)
                      .filter(j -> integers[i][j] == null)
                      .mapToObj(j -> new SimpleEntry<Integer, Integer>(i, j))) 
               .collect(Collectors.toList());

 System.out.println(collect);

然后collect列表中所有条目的integers[entry.getKey()][entry.getValue()] == nulltrue

编辑:这个问题本身是微不足道的,唯一要做的决定是应该使用哪个容器来存储索引。这是Integer个数组的“自然”解决方案:

    List<Integer[]> collect1 = new ArrayList<>();
    for (int i = 0; i < integers.length; i++){
        for (int j = 0; j < integers[i].length; j++){
            if (integers[i][j] == null){
                collect1.add(new Integer[]{i, j});
            }
        }
    }

    collect1.forEach(arr -> System.out.println("null at " +arr[0] + "," + arr[1]));
© www.soinside.com 2019 - 2024. All rights reserved.