Java Instream,我需要2D数组中具有空值的元素的索引。我可以用对于单维数组,我在下面做了,而且有效:
IntStream.range(0, myArr.length)
.filter(x -> myArr[x] == null)
.findFirst()
.orElse(-1);
我可以在数组上使用流,并且flatmap可以到达对象,但是我的目的是获取myArr [i] [j]为空的i和j的值。
您可以使用Stream.iterate
和flatMap
将所有值为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()] == null
为true
编辑:这个问题本身是微不足道的,唯一要做的决定是应该使用哪个容器来存储索引。这是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]));