ストリーム上で次の操作を連続して実行します。Java APIストリームを使用してそのような操作を実行する方法は?
1)。 2
からn
までの数字のストリームを作成したいと思います。
これは次のようになります。IntStream.range(2, n)
。
2)。この番号が既にこのフィルタを通過した他の番号で割り切れない場合にのみ、さらに数字を進めるフィルタを追加します。
このようなフィルタを実装するのに問題があります。私はArrayList
を含む匿名クラスを作成しなければならないと思うし、このフィルタを通過したすべての数値をこのArrayList
に保存します。すべては次のようになります。
IntStream.range(2, n).filter(new IntPredicate() {
ArrayList<Integer> prev;
@Override
public boolean test(int value) {
if (prev == null) {
prev = new ArrayList();
return true;
}
for (int i = 0; i < prev.size(); i++) {
if (value % prev.get(i) == 0) {
return false;
}
}
prev.add(value);
return true;
}
3)。 Map<Integer, Integer>
を取得します。ここで、キーは数百(つまり100,200,300,400など)で、valueは各100の素数の数です。だから百に対して100
私は[100,199]の範囲の素数の数を見つけなければなりません。
2番目のステップの後にストリームに残っている素数だけがあることは明らかですね。しかし、私は3番目のステップを実行する方法を知りませんし、2番目のステップの実装についてはわかりません。
すべての操作を正しく適用できますか?
ストリームはこれにあまり適していません。実際には仕事に適したツールではありません。 –