{0, 1, 2, 3, 4} のようなプリミティブまたはオブジェクトのストリームが与えられた場合、どうすればそれを簡単に次のように変換できますか?以下に示すように、連続したペアは何ですか?
{new Pair(0, 1), new Pair(1, 2), new Pair(2, 3), new Pair(3, 4)}
Delving
Java 8 ストリーム ライブラリは、並列処理のためにストリームを管理可能なチャンクに分割する点では優れていますが、ステートフル パイプライン ステージでは課題が生じます。現在のストリーム要素のインデックスを取得したり、隣接する要素にアクセスしたりすることは、顕著な制限です。
これらの制約を回避するために、インデックスを利用してストリームを駆動する手法がよく採用されます。このアプローチでペアを生成する方法を簡単に示します:
コード スニペット:
IntStream.range(1, arrayList.size()) .mapToObj(i -> new Pair(arrayList.get(i-1), arrayList.get(i))) .forEach(System.out::println);
解決策の説明:
この例では、1 から始まるインデックスを使用して ArrayList を反復処理し、つまり、すべてのインデックス i について、arrayList.get(i-1) と arrayList.get(i) の両方にアクセスできます。コードの核心は、各インデックスを隣接する要素を含むペアに変換する mapToObj 関数です。
制限事項と拡張機能:
このアプローチは次の場合に効果的です。ランダム アクセス コレクションに格納された有限ストリームには適用されません。無限ストリームには適用できません。ただし、パイプラインは並列実行できるため、パフォーマンス上の利点が得られます。
以上が要素のストリームから連続するペアを効率的に生成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。