日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談Java編程之if-else的優化技巧總結

瀏覽:156日期:2022-08-10 09:07:32
一、使用策略枚舉來優化if-else

看到網上蠻多人推薦使用策略模式來優化if-else,但我總覺得,搞一堆策略類來優化大批量if-else,雖然想法很好,但無意之中很可能又會創造出很多類對象,就顯得過于繁重了。若想使用策略模式來優化大批量if-else,其實有一種更好的方式,這是策略模式+枚舉方式的改良,我以前寫過這樣一篇優化文章,詳細直接點擊該文了解《策略枚舉:消除在項目里大批量使用if-else的優雅姿勢》

二、使用三目運算符來優化if-else

1、根據if-else條件來判斷賦值的,如:

String id='';if(flag){ id='a';}else{ id='b';}

利用三目運算符,可以直接優化成一行代碼:

id=flag?'a':'b';

2、利用if-else條件來判斷調用方法,如:

Set<String> set1=new HashSet<>();Set<String> set2=new HashSet<>();if(flag){ set1.add(id);}else{ set2.add(id);}

利用三目運算符,可以直接優化成:

Set<String> set1=new HashSet<>();Set<String> set2=new HashSet<>();(flag?set1:set2).add(id);三、使用Stream優化if中判斷條件過多情況

Jdk1.8新特性Stream流有三個這樣API,anyMatch,allMatch,noneMatch,各自的作用如下:

anyMatch:判斷條件里任意一個滿足條件,則返回true; allMatch:判斷條件里所有都滿足條件,則返回true; noneMatch:判斷條件里所有都不滿足條件,則返回true;

它們的使用方式其實很簡單:

List<String> list = Arrays.asList('a', 'b', 'c','d', '');//任意一個字符串判斷不為空則為trueboolean anyMatch = list.stream().anyMatch( s->StringUtils.isEmpty(s));//所有字符串判斷都不為空則為trueboolean allMatch = list.stream().allMatch( s->StringUtils.isEmpty(s));//沒有一個字符判斷為空則為trueboolean noneMatch = list.stream().noneMatch( s->StringUtils.isEmpty(s));

可見,根據以上三種實現方式,可以在某種程度上優化if里判斷條件過多的情況,那么,在哪種場景里比較合適利用其優化呢?

在日常實際開發當中,我們可能會看到過這樣存在很多判斷條件的代碼:

if(StringUtils.isEmpty(str1) || StringUtils.isEmpty(str2) || StringUtils.isEmpty(str3) || StringUtils.isEmpty(str4) || StringUtils.isEmpty(str5) || StringUtils.isEmpty(str6) ){ .....}

這時,就可以考慮到,使用stream流來優化,優化后的代碼如下:

if(Stream.of(str1, str2, str3, str4,str5,str6).anyMatch(s->StringUtils.isEmpty(s))){ ..... }

這樣優化后,是不是就比那堆if里堆積到一塊的條件更為優雅了?

當然,這只是針對或條件的,若是遇到與條件時,同樣可以用Stream來優化,例如:

if(StringUtils.isEmpty(str1) && StringUtils.isEmpty(str2) && StringUtils.isEmpty(str3) && StringUtils.isEmpty(str4) && StringUtils.isEmpty(str5) && StringUtils.isEmpty(str6)){ .....}

使用Stream優化后:

if(Stream.of(str1, str2, str3, str4,str5,str6).allMatch(s->StringUtils.isEmpty(s))){ .....}四、使用Map優化if-else

優化量比較多的面向過程的if-else語句,還可以考慮使用Map來優化,雖然在一定程度上,創建一個額外map會占用內存,但那丁點內存對于現階段計算機而言,可以說不足掛齒。下面使用一個案例來介紹下————

在一些祖傳老代碼當中,可能遇到過類似這樣又臭又冗余的if-else寫法:

public String getDay(String day){ if('Monday'.equals(day)){ return '今天上英語課'; }else if('Tuesday'.equals(day)){ return '今天上語文課'; }else if('Wednesday'.equals(day)){ return '今天上數學課'; }else if('Thursday'.equals(day)){ return '今天上音樂課'; }else if('Sunday'.equals(day)){ return '今天上編程課'; }else{ ...... }}

這時,可以根據具體場景,來考慮是否可以利用Map優化,使用Map優化的方式,是先在該類中定義一個static的map,類似這樣:

public static final Map<String,String> dayMap= ImmutableMap.<String, String>builder() .put('Monday','今天上英語課') .put('Tuesday','今天上語文課') .put('Wednesday','今天上數學課') .put('Thursday','今天上音樂課') .put('Sunday','今天上編程課') .build();

定義完后,就直接在先前使用if-else的方法里,進行這樣優化:

public String getDay(String day){ return dayMap.get(day);}

這樣優化后,業務方法里的判斷獲取值的處理,是不是就清爽了很多,當然,這只是針對量比較多的if-else而言,若是比較少的判斷語句,再額外定義一個map來搞,隱約有畫蛇添足的嫌疑。

細心的讀者可能會發現, 我在定義map的時候,使用到了一個ImmutableMap的東西,這是Google Guava里的一個類,可生成一個不可變的Map對象,這就意味著,初始化定義后,后續就無法再put修改了,它的這個特性可以保證線程的安全。一般用來替換if-else的map,我們就是要求在初始化定義后,就不會再允許修改了,因此,這個ImmutableMap生成的map,可以很好地幫我們實現這一點。另外,最重要一點是,使用這個ImmutableMap,可以實現鏈式編程,就像上面定義的鏈式寫法,若是用傳統的map定義,就每次都要map.put()、map.put()地賦值。

關于ImmutableMap的原理,我專門寫一篇文章來介紹:《Java源碼分析:Guava之不可變集合ImmutableMap的源碼分析》

五、使用枚舉優化if-else

前面提到過可使用策略枚舉來優化大批量的if-else,當然,若只是判斷獲不同條件來取值的代碼,可以考慮直接使用枚舉來優化,其效果與map的處理效果類似。

還是用前面判斷課程的if-else為案例來優化。

首先,先在類中定義一個枚舉:

public enum dayEnum { Monday('今天上英語課'), Tuesday('今天上語文課'), Wednesday('今天上數學課'), Thursday('今天上音樂課'), Sunday('今天上編程課'); public String value; dayEnum(String value){ this.value=value; }}

定義完后,就可以類似前面map的方式,直接將判斷值去枚舉里獲取,然后直接返回獲取到的值,這樣寫法是不是也比較優雅了。

public String getDay(String day){ return dayEnum.valueOf(day).value;}六、使用Optional類優化if-else

在實際工作中,我曾經遇到類似這樣的代碼,看起來像沒什么問題,但如果其中某個屬性值不幸為null,那么,恭喜你,你將會喜提一個NullPointerException異常。

String name=school.getGrades().getStuendt().getName();

若要處理這個可能出現的空指針異常,傳統寫法,可以寫一堆if-else語句來處理,就像這樣子——

String name=null;if(school!=null){ Grades grade=school.getGrades(); if(grade!=null){Student student=grade.getStuendt();if(student!=null){ name = student.getName();} }}

作為一個極度討厭if-else的人士,怎么能容忍這一堆層層嵌套的代碼存在呢!

在遇到這種層層嵌套的if-else判斷時,可以考慮使用jdk1.8新特性Optional 類來優化,優化后的效果如下,頓時又優雅了很多。

String name = Optional.ofNullable(school) .flatMap(School::getGrades) .flatMap(Grades::getStuendt) .map(Student::getName) .orElse(null);

本文屬于if-else優化編程技巧總結,后續若在實踐中有新收獲,將持續更新......

到此這篇關于淺談Java編程技巧之if-else的優化總結的文章就介紹到這了,更多相關Java if-else的優化內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品捆绑调教一区二区三区| 樱桃视频成人在线观看| 视频小说一区二区| 久久精品青草| 一区二区三区四区在线观看国产日韩| 美国三级日本三级久久99 | 国产欧美亚洲一区| 久久亚洲国产精品尤物| 成人免费网站www网站高清| 免费在线成人网| 清纯唯美亚洲综合一区| 精品资源在线| 亚洲成人三区| 日韩中文字幕在线一区| 欧美国产另类| 五月婷婷六月综合| 日本久久一区| 国产字幕视频一区二区| 欧美一级久久| 99视频精品视频高清免费| 日韩欧美2区| 欧美激情91| 久久亚洲二区| 国产一区二区亚洲| 亚州欧美在线| 亚洲一级特黄| 国产拍在线视频| 天堂久久av| 免费不卡中文字幕在线| 国产不卡av一区二区| 日本aⅴ亚洲精品中文乱码 | 日韩亚洲一区在线| 奇米亚洲欧美| 欧美激情91| 午夜一级久久| 久久久久久久久久久9不雅视频| 亚洲区欧美区| 亚洲成人精选| 九一精品国产| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 日韩a一区二区| 国产日韩精品视频一区二区三区| 偷拍欧美精品| 激情欧美一区二区三区| 电影亚洲精品噜噜在线观看| 国产区精品区| 欧美一级二级三级视频| 亚洲综合婷婷| 亚洲精品综合| 美国三级日本三级久久99 | 免播放器亚洲| 色婷婷久久久| 肉色欧美久久久久久久免费看| 蜜臀av在线播放一区二区三区| 在线一区av| 一本大道色婷婷在线| 99久久精品网| 亚洲一级影院| 亚洲91久久| 亚洲福利精品| 国产精品美女久久久浪潮软件| 国产精品av一区二区| 99久久精品国产亚洲精品| 欧产日产国产精品视频| 日韩伦理在线一区| 欧美一级精品| 国产精品婷婷| 日韩国产欧美视频| 日本一区免费网站| 久久a爱视频| 欧美日韩尤物久久| 在线精品国产亚洲| 日韩精品三级| 国产精品chinese| 国内一区二区三区| 亚洲a在线视频| 亚洲一级淫片| 国产精品porn| 久久婷婷激情| 爽好久久久欧美精品| 日本aⅴ亚洲精品中文乱码 | 亚洲精品一级二级三级| 日韩和欧美的一区| 国产成人精品三级高清久久91| 日韩精品一卡| 香蕉成人av| 日本综合精品一区| 日本精品影院| 日韩在线网址| 久久精品亚洲人成影院| 日本欧美一区二区在线观看| 国产一区二区三区久久久久久久久| 亚洲天堂免费电影| 天海翼亚洲一区二区三区| 久久久亚洲欧洲日产| 快播电影网址老女人久久| 视频一区中文字幕国产| 福利在线一区| 亚久久调教视频| 久久精品免费一区二区三区 | 爽好多水快深点欧美视频| 精品国产三区在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 91亚洲精品视频在线观看| 久久精品成人| 狂野欧美性猛交xxxx| 视频一区视频二区中文| 新版的欧美在线视频| 牛牛精品成人免费视频| 亚洲欧洲美洲国产香蕉| 国产精品丝袜xxxxxxx| 国产成人精品福利| 国产精品v一区二区三区| 亚洲三级观看| 91久久在线| 欧美日韩水蜜桃| 国产精品蜜芽在线观看| 日本免费在线视频不卡一不卡二| 99久久久国产精品美女| 国际精品欧美精品| 国产精品日本一区二区三区在线| 中文一区一区三区免费在线观 | 国产h片在线观看| 久久成人高清| 青草综合视频| 97精品国产99久久久久久免费| 老司机精品久久| 另类国产ts人妖高潮视频| 黑丝美女一区二区| 久久国产精品久久w女人spa| 亚洲一区二区成人| 中文不卡在线| 欧美亚洲tv| 麻豆视频一区| av日韩中文| 美女视频黄免费的久久| 国产精品成人自拍| 久久99蜜桃| 日韩在线观看不卡| 亚洲精品在线观看91| 日韩中文字幕不卡| 最新国产精品视频| 欧美另类中文字幕| 精品美女久久| 精品欧美激情在线观看| 日韩影院精彩在线| 久久av日韩| 在线视频观看日韩| 一区二区精彩视频| 久久中文字幕一区二区三区| 97欧美在线视频| 亚洲视频www| 欧美一区成人| 亚洲成人二区| 亚洲精品一级| 鲁大师精品99久久久| 91精品综合| 日韩高清一区| 久久久久久久久久久9不雅视频| 亚洲欧美日韩国产| 国产精品久久久久9999高清| 成人日韩在线观看| 国产一级成人av| 精品一区毛片| 美女尤物国产一区| 日韩精品一区二区三区免费观看| 美女91精品| 在线中文字幕播放| 国产伦一区二区三区| 欧美日韩免费观看一区=区三区| 人人精品亚洲| 精品一区91| 免费在线观看成人| 狠狠色狠狠色综合日日tαg| 精品三级国产| 荡女精品导航| 国产精品任我爽爆在线播放| 亚洲区欧美区| 最近国产精品视频| 久热综合在线亚洲精品| av日韩中文| 精品亚洲二区| 国模精品一区| 亚洲女同av| 日韩亚洲一区在线| 精品网站999| 国产精品成人国产| 91精品国产成人观看| 丁香婷婷久久| 欧美成人aaa| 亚洲+小说+欧美+激情+另类| 国产精品99一区二区三| 日本v片在线高清不卡在线观看| 亚洲爱爱视频| 97精品国产| 久久不见久久见中文字幕免费| 黑丝一区二区三区| 婷婷综合五月| 女主播福利一区| 久久久夜夜夜|