我正在尝试使用Java SE 8中的惰性函数操作,并且我想将索引i映射到一对/元组(i,value [i]),然后基于第二个value [i]
元素进行filter
过滤,最后仅输出索引。
在Lambda和流的新时代,我还必须忍受这个吗:What is the equivalent of the C++ Pair<L,R> in 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]
。我如何获得这个结果?
AbstractMap.SimpleImmutableEntry<K,V>
。但无论如何,与其将i
映射到(i, value[i])
仅用于按value[i]
进行过滤并将其映射回i
:为什么不首先直接按value[i]
进行过滤,而不需要进行映射呢? - Holgeri
,我无法完成此操作。我还需要使用value[i]
进行条件判断。这就是为什么我需要(i, value[i])
。 - necromancer[0, 2, 4]
吗? - Stuart Marks