我正在玩Java SE 8中的惰性函数操作,我想要一个对对/元组map
的索引,然后基于第二个元素,最后只输出索引。i
(i, value[i])
filter
value[i]
我还必须忍受这一点吗:Java中的C ++ Pair <L,R>等效项是什么?在lambdas和stream的大胆新时代中?
更新:我提供了一个相当简化的示例,该示例在以下答案之一中提供了@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]
该输出对应于all的三列的计数false
。我需要的是这三列的索引。正确的输出应为[0, 2, 4]
。我怎么能得到这个结果?
i
在流中,我无法做到。我也需要value[i]
标准。这就是为什么我需要(i, value[i])
[0, 2, 4]
吗?
AbstractMap.SimpleImmutableEntry<K,V>
有很多年了……但是,无论如何,不是仅映射i
到(i, value[i])
进行过滤value[i]
并映射回i
:为什么不value[i]
首先进行过滤而不进行映射?