成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java8使用Stream的缺點是調試困難?教你一招你就不會這么認為了

開發 后端
今天給大家分享如何在 IntellJ IDEA 中調試 Java8 帶來牛逼哄哄的的新特性 Stream。

今天給大家分享如何在 IntellJ IDEA 中調試 Java8 帶來牛逼哄哄的的新特性 Stream。

寫在前面

Java8 API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理集合數據。Stream API可以極大提高Java程序員的生產力,讓我們寫出高效率、干凈、簡潔的代碼。

這種風格將要處理的元素集合看作一種流, 流在管道中傳輸, 并且可以在管道的節點上進行處理, 比如篩選, 排序,聚合等。元素流在管道中經過中間操作(intermediate operation)的處理,最后由最終操作(terminal operation)得到前面處理的結果。

 

  1. +--------------------+       +------+   +------+   +---+   +-------+ 
  2. | stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect| 
  3. +--------------------+       +------+   +------+   +---+   +-------+ 

以上的流程轉換為 Java 代碼為:

  1. List<Integer> transactionsIds =  
  2. widgets.stream() 
  3.              .filter(b -> b.getColor() == RED) 
  4.              .sorted((x,y) -> x.getWeight() - y.getWeight()) 
  5.              .mapToInt(Widget::getWeight) 
  6.              .sum(); 

Java 代碼這樣寫,表達的意思也很明確,書寫起來不要太流暢哦😯~

反正自從我們項目組升級到 Java8 后,一般涉及到集合遍歷、元素轉換、過濾、排序、統計,我反手就是一個 Stream。身邊同事基本上也都是這么用的,因為書寫起來實在太流暢了,feel倍兒爽~

痛點

之前我面試阿里的時候,二面的面試官就問到 Java8 都有哪些新特性呢?其中我就提到了 Java8 帶來的 Stream,然后他就問缺點是什么?我回答寫的代碼難以調試,因為不像for循環那樣可以每一行打斷點調試了。

Java7中我們計算空字符串的數量可以使用如下代碼:

  1. // 計算空字符串 
  2. List<String> strings = Arrays.asList("abc""""bc""efg""abcd""""jkl"); 
  3. System.out.println("列表: " + strings); 
  4. int count = 0; 
  5. for (String string : strings) { 
  6.     if (string.isEmpty()) { 
  7.         count++; 
  8.     } 
  9. return count

調試的時候直接在循環中打上斷點,以Debug方式運行,就可以跟蹤代碼的執行流程了:

 

 

 

 

來,我們再看下Java8中的實現代碼:

 

  1. System.out.println("使用 Java 8: "); 
  2. count = strings.stream().filter(string -> string.isEmpty()).count(); 
  3. System.out.println("空字符串數量為: " + count); 

就一行代碼,我們需要怎么打斷點調試呢?

 

 

 

 

如上圖所示,在 Stream 代碼的這一行打斷點,如果你選擇 Line ,那么就無法調試,跟蹤不到Stream在管道中傳輸以及在管道的節點上進行的filter處理動作。

選擇斷點加在 lambda表達式上,然后使用單步調試才可以進入,不得不說 IDEA 是真的強👍🏻。我印象中之前使用2019版本打斷點是沒有出現這個提示的,反正2020以上的版本肯定都有了,打斷點的時候就會提示選擇。

雖然可以調試,問題是可以解決了,不過還不夠強,接下來大家別眨眼睛,一個更強大、更直觀的視圖,幫助我們一眼就能看出 Stream 的處理過程。

可視化追蹤 Stream 鏈

步驟還是上面的一樣,打斷點,以Debug的方式運行程序,區別在于打斷點時無需選擇是行端點還是lambda表達式上面,隨便選擇只要打上斷點即可:

 

 

 

 

 

點擊圖中按鈕,就會自動打開一個Stream處理流程的視圖,整個處理過程變得一目了然,視圖分為三分部,左邊是初始集合的數據,中間是Stream處理過濾后的數據,右邊是最終操作得到的處理結果。

 

 

 

 

這樣Java8 Stream 相關的API( 篩選, 排序,聚合)操作就都可以可視化的展示出來了,調試時非常的方便,排查問題豈不是一眼就看到問題所在了。你說這個玩意香不香呢😋? 

責任編輯:龐桂玉 來源: Hollis
相關推薦

2022-09-06 11:53:00

開發計算

2010-01-06 09:54:59

2019-09-03 09:30:46

ss 命令SocketLinux

2021-06-28 20:01:07

電腦性能Windows 7

2020-08-13 09:23:59

瀏覽器Chrome下載

2012-02-01 15:41:42

2023-05-12 07:40:01

Java8API工具

2016-09-25 16:02:09

《硅谷》編程虛擬內存

2020-09-16 06:08:10

Linux文本比對代碼

2024-05-17 08:19:53

jackson數組切片

2011-05-03 11:13:51

黑盒

2020-06-22 14:18:02

運維架構技術

2021-07-06 07:21:17

橋接模式組合

2019-01-03 08:14:20

路由器系統后臺網絡

2023-12-18 08:24:09

LinuxPythonWord

2022-06-21 09:27:01

PythonFlaskREST API

2020-10-20 08:01:30

MySQL密碼Windows

2022-02-06 00:02:43

Windows 11虛擬機微軟

2020-11-03 16:36:36

Windows微軟彈窗

2018-06-27 10:10:34

APP評分彈窗蘋果
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美黄在线观看 | 成人在线视频免费播放 | 欧美无乱码久久久免费午夜一区 | 7777在线| 99亚洲精品| 精品视频一区二区 | 亚洲成人国产 | 国产精品日女人 | 久久99一区二区 | 日韩av在线一区 | 中文字幕国产精品 | 欧美日韩国产一区二区 | 婷婷综合久久 | 黄免费在线 | 日韩成人一区二区 | 久久手机视频 | 久久国产欧美日韩精品 | 羞羞视频免费在线观看 | 奇米在线| 最新中文字幕 | 久久av网| 97视频免费 | 美女高潮网站 | av电影手机版| 欧美αv| 激情av在线 | 国产精品高潮呻吟久久 | 91毛片在线观看 | 一区亚洲 | 欧美一区视频 | 精品国产一区一区二区三亚瑟 | 日韩欧美中文字幕在线观看 | 欧美一级黄色免费看 | 久久久精选 | 亚洲一级在线 | 成人在线电影在线观看 | 国产精品视频免费看 | 日韩视频在线免费观看 | 九九热精品视频在线观看 | 中文字幕不卡在线88 | 久久久久久亚洲欧洲 |