我正在Java SE 8中使用惰性函数操作,我想将一个索引I映射到一个对/元组(I,值[I]),然后根据第二个值[I]元素进行筛选,最后只输出索引。
我还必须忍受这个问题:Java中的c++ Pair<L,R>等价于什么?在大胆的新时代的lambdas和溪流?
更新:我给出了一个相当简单的例子,在下面的一个答案中,@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],它对应于三列的计数都是假的。我需要的是这三列的下标。正确的输出应该是[0,2,4]。我怎样才能得到这个结果?