Я играю с ленивыми функциональными операциями в 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]
. Как я могу получить этот результат?