日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

使用IntelliJ调试Java流

發布時間:2023/12/3 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用IntelliJ调试Java流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

流功能非常強大,只需幾行就可以捕獲您預期功能的要點。 但是,就像它們在一切正常工作時一樣平滑,就像它們在表現不正常時一樣令人痛苦。 了解如何使用IntelliJ調試Java Streams并深入了解Stream的中間操作。

在本文中,我將在示例中使用Sakila示例數據庫和Speedment Stream ORM 。

原則

讓我們從一個簡單的Stream開始,我們可以使用它在IntelliJ中建立Stream調試器的基礎知識:

List<String> strings = Stream.of("C", "A", "B").sorted().collect(toList());

上面的代碼首先創建一個初始Stream ,該初始Stream由
String元素"C", "A", "B" 。 然后,將中間操作sorted()應用于第一個Stream ,從而(至少在Java 8-10中)創建一個新的Stream ,其中初始流中的元素根據其自然順序進行排序。 即第二個流將包含元素"A", "B", "C" 。 最后,將這些元素收集到List 。

上面的代碼等效于:

Stream<String> s0 = Stream.of("C", "B", "A"); // "C", "A", "B" Stream<String> s1 = s0.sorted(); // "A", "B", "C" List<String> strings = s1.collect(toList()); // [“A”, “B”, “C”]

基本上,這就是Stream調試器的操作方式。 它將流管道分成較小的段,并逐步調用不同的中間運算符,同時保留所分析的每個步驟的元素:

Stream.of("C", "B", "A").peek(saveStep(0)).sorted().peek(saveStep(1)).collect(toList()); // The final result is saved to step 2

注意:這在技術上并不完全正確,但是它提供了一個很好的總體輪廓。

在外觀上,在IntelliJ的調試器中看起來像這樣:

這樣可以清晰,簡潔地查看每個中間操作之間Stream管道內部發生的情況,并顯示Stream的最終結果。

調用方式

通過首先設置定義了Stream的斷點來調用流調試器:

然后,啟動調試會話:

當遇到斷點時,可以通過按下其指定的(可能是有些隱藏的)按鈕來調用Stream調試器,如下面的紅色圓圈所示:

如本文前面所示,這將拉起流調試器。

數據庫流

我將使用流ORM Speedment,該流允許使用標準Java流查詢數據庫,因此,也可以使用IntelliJ調試這些流。 可以使用Speedment 初始化程序設置一個Speedment項目。

Java應用程序本身可以這樣設置:

Speedment app = new SakilaApplicationBuilder().withPassword("sakila-password") // Replace with your own password.build();FilmManager films = app.getOrThrow(FilmManager.class);

現在,我們可以流式傳輸數據庫表“ film”。 例如這樣:

List<Film> map = films.stream().filter(Film.LENGTH.equal(60)).sorted(Film.RATING.reversed()).collect(toList());

這將過濾掉所有Film具有長度對象等于60分鐘,然后進行排序那些Film根據對象
Film.RATING (降序),然后將這些元素收集到List 。

調用Stream調試器時,將看到以下內容:

可以看出,初始流中有1,000部電影。 在執行篩選操作之后,僅剩下8部影片,隨后將其分類并收集到List 。

計算統計

假設我們要計算所有額定為PG-13電影的最小,最大和平均長度。 可以這樣完成:

IntSummaryStatistics stat = films.stream().filter(Film.RATING.equal("PG-13")).mapToInt(Film.LENGTH.asInt()).summaryStatistics();

在Stream調試器中如下所示:


可以看出,可以與流調試器進行交互并單擊元素,從而突出顯示它們在流管道中的路徑。 也可以在各個步驟的元素之間滾動。

速度通常可以優化數據庫Stream中的中間操作,并將這些步驟合并到SQL查詢中。 但是,使用Stream調試器時,不會進行此類優化,并且我們能夠看到流管道中的所有步驟。

結論

Stream調試器是一個隱藏的瑰寶,在使用Streams時可能會有很大幫助。

我認為IntelliJ團隊提出了一個非常好的功能。

在此處下載Speedment。 在此處下載IntelliJ。

翻譯自: https://www.javacodegeeks.com/2018/09/debugging-java-streams-with-intellij.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的使用IntelliJ调试Java流的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。