Я играю с ленивыми функциональными операциями в Java SE 8, и хочу map индекс i для пары /tuple (i, value[i]), затем filter на основе второго элемента value[i] и, наконец, выводит только индексы.
Должен ли я по-прежнему страдать от этого: Что эквивалентно С++ Pair < L, R > в Java? в смелую новую эру лямбда и потоков?
Обновление:. Я представил довольно упрощенный пример, в котором в одном из приведенных ниже ответов содержится четкое решение, предлагаемое @dkatzel. Однако он не обобщает. Поэтому позвольте мне добавить более общий пример:
package com.example.test;
import java.util.ArrayList;
import java.util.stream.IntStream;
public class Main {
  public static void main(String[] args) {
    boolean [][] directed_acyclic_graph = new boolean[][]{
        {false,  true, false,  true, false,  true},
        {false, false, false,  true, false,  true},
        {false, false, false,  true, false,  true},
        {false, false, false, false, false,  true},
        {false, false, false, false, false,  true},
        {false, false, false, false, false, false}
    };
    System.out.println(
        IntStream.range(0, directed_acyclic_graph.length)
        .parallel()
        .mapToLong(i -> IntStream.range(0, directed_acyclic_graph[i].length)
            .filter(j -> directed_acyclic_graph[j][i])
            .count()
        )
        .filter(n -> n == 0)
        .collect(() -> new ArrayList<Long>(), (c, e) -> c.add(e), (c1, c2) -> c1.addAll(c2))
    );
  }
}
Это дает  неправильный вывод [0, 0, 0], который соответствует подсчетам для трех столбцов, всех false. Мне нужны индексы этих трех столбцов. Правильный вывод должен быть [0, 2, 4]. Как я могу получить этот результат?
