Java SE 8で遅延関数操作をいじってmap
います。i
ペア/タプルへのインデックスを作成し(i, value[i])
、次にfilter
2番目のvalue[i]
要素に基づいて、最後にインデックスのみを出力します。
私はまだこれに苦しむ必要があります:JavaのC ++ Pair <L、R>に相当するものは何ですか?ラムダとストリームの大胆な新時代に?
更新:かなり単純化した例を紹介しました。これには、@ 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))
);
}
}
これにより、すべての3つの列のカウントに対応する誤った出力が生成されます。私が必要なのは、これらの3つの列のインデックスです。正しい出力はです。どうすればこの結果を得ることができますか?[0, 0, 0]
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]
マッピングせずに、最初の場所で?