IntelliJ IDEA 調(diào)試 Java 8,實在太香了
前段時間,棧長發(fā)布了一篇關于 Java 8 Optional.map 的實用文章,留言區(qū)就有的人說 Java 8 的語法糖不方便調(diào)試,還要視情況使用。

留言區(qū)也有人說 IntelliJ IDEA 早已支持 Java 8 Stream 調(diào)試,因為我平時也很少調(diào)試,那么我就以 IntelliJ IDEA 來演示下如何調(diào)試 Java 8 中的 Stream 鏈式調(diào)用吧。
先寫一段 Java 8 Stream 示例:
- /*
- * 來源:Java技術棧
- */
- public static void main(String[] args) {
- Stream.of(100, 200, 300, 400, 500)
- .mapToLong(e -> e * 10)
- .filter(e -> e > 2000)
- .forEach(System.out::println);
- }
這里只演示了一種 Stream 創(chuàng)建方式,Java 8 創(chuàng)建 Stream 的 10 種方式請點擊這里進行閱讀。
這個程序是先構建一個 5 個數(shù)字的 Stream, 然后再對每個數(shù)字 * 10,再篩選出大于 2000 的數(shù)字進行打印。
如何調(diào)試每個鏈式調(diào)用的過程呢?
先在第一行打個斷點,然后進入調(diào)試模式運行,當斷點進入時,點擊調(diào)試窗口的 Trace Current Stream Chain 按鈕:

然后自動進入當前 Stream 跟蹤調(diào)試窗口,上面會展示每個鏈式調(diào)用的選項卡,點擊各個選項卡可以看對應每步的跟蹤結(jié)果。
如下面所示:



也可以點擊左下角的 Flat Mode 進入扁平模式,一次性展示所有跟蹤結(jié)果:

OK,Java 8 Stream 的調(diào)試不是問題了, 但我并沒有找到像 Optional 鏈式調(diào)用的調(diào)試方式。
比如下面一段 Optional 示例:
- /*
- * 來源:Java技術棧
- */
- public static void main(String[] args) {
- String string = Optional.of("hi,")
- .map(e -> e + "Java")
- .map(e -> e + "技術")
- .map(e -> e + "棧").get();
- System.out.println(string);
- }
調(diào)試如圖所示:

可惜,Trace Current Stream Chain 按鈕是灰色狀態(tài),不能進入,因為那個按鈕只能被 Stream 調(diào)試所用。
那像這種非 Stream 鏈式調(diào)用怎么調(diào)試呢?
斷點進入后,可以選中需要調(diào)試的部分鏈式代碼片斷,然后右鍵選中 Evaluate Expression 菜單(ALT + F8)進入表達式計算窗口:


點擊 Evaluate 按鈕開始計算:

計算無誤,該表達式還可以自由編輯,非常強大。