Вы можете использовать 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]));