原理###### IntelliJ で基本的なストリーム デバッガーを作成できる単純なストリームから始めましょう:
.sorted()
.collect(toList());
上記のコードは、文字列「A」、「B」、および「C」で構成されるストリームを作成します。次に、この Stream はsorted()されて、要素が最初の Stream の要素のアルファベット順である新しい Stream (少なくとも Java 8 ~ 10) が作成されます。つまり、2 番目のストリームには、「A」、「B」、「C」の 3 つの要素が含まれています。最後に、要素をリストに追加します。
Stream
Stream
List
これは一般に、Stream デバッガーがどのように動作するかを示しています。ストリーム パイプライン操作を複数のコード フラグメントに分割し、中間操作を段階的に呼び出して、各操作の要素コンテンツを分析用に保持できるようにします。
Stream.of("C", "B", "A")
.peek(saveStep(0))
.sorted()
.peek(saveStep(1))
.collect(toList()); // 最終結果はステップ 2
に保存されます 注: 実際の技術的な実装はこのようなものではなく、単に概要を説明するものです。
IntelliJ のデバッガーには、より視覚的な表現があります:
Stream パイプラインのすべての中間操作の詳細と最終結果が簡潔かつ明確に表示されます。
移行###### ストリーム デバッガーを呼び出したい場合は、まずストリーム定義にブレークポイントを設定する必要があります:
次に、デバッグ セッションを開始します (デバッグ モードで実行):
ブレークポイントに到達したら、指定したボタン (見つけにくい場合があります) を押して、以下の赤い丸でマークされたストリーム デバッガーを呼び出すことができます:
これにより、上に示したようにストリーム デバッガーが開きます。
データベースストリーム
Speedment (ストリーム ORM) を使用します。これにより、標準の Java Streams 操作を介してデータベースにクエリを実行できるため、IntelliJ を介して操作をデバッグできます。 Speedment プロジェクトは、Speedment イニシャライザを介して作成できます。
Java アプリケーションは次の方法で作成できます。
Speedment アプリ = 新しいsakilaApplicationBuilder()
.withPassword("sakila-password") // 自分のパスワードに置き換えます
。建てる();###### FilmManager フィルム = app.getOrThrow(FilmManager.class);
これで、データベースの「film」テーブルをストリーミングできるようになりました。以下に例を示します:
リスト<映画> マップ = 映画.stream()
.filter(Film.LENGTH.equal(60))
.sorted(Film.RATING.reversed())
.collect(toList());
このコードは、長さが 60 分のすべての Film オブジェクトをフィルターで除外し、Film.RATING によって Film オブジェクトを (降順で) 並べ替え、最後にすべての要素を List に入れます。
Stream デバッガーを呼び出すと、次の図が表示されます:
初期ストリームには 1000 本の映画があることがわかります。フィルタリング操作の後、8 つの映画だけが残り、それらが並べ替えられてリストに入れられます。
統計の計算
PG-13 (映画評価システムの一種) と評価されたすべての映画の最小、最大、平均時間を計算するとします。コードは以下のように表示されます:
IntsummaryStatistics stat = 映画.stream()
.filter(Film.RATING.equal("PG-13"))
.mapToInt(Film.LENGTH.asInt())
.summaryStatistics();
ご覧のとおり、ストリーム デバッガーを操作し、ストリーム パイプライン内の要素をクリックして強調表示することができます。また、要素間をスクロールして個々のステップを表示することもできます。
Speedment はデータベース ストリームの中間操作を最適化し、それらを SQL クエリに統合します。ただし、Stream デバッガーを使用する場合、Stream パイプラインのすべての操作ステップを確認できるように最適化が有効になることはありません。
以上がIntelliJ を使用して Java ストリームをデバッグする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。