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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

淺談Java編程之if-else的優(yōu)化技巧總結(jié)

瀏覽:160日期:2022-08-10 09:07:32
一、使用策略枚舉來(lái)優(yōu)化if-else

看到網(wǎng)上蠻多人推薦使用策略模式來(lái)優(yōu)化if-else,但我總覺(jué)得,搞一堆策略類(lèi)來(lái)優(yōu)化大批量if-else,雖然想法很好,但無(wú)意之中很可能又會(huì)創(chuàng)造出很多類(lèi)對(duì)象,就顯得過(guò)于繁重了。若想使用策略模式來(lái)優(yōu)化大批量if-else,其實(shí)有一種更好的方式,這是策略模式+枚舉方式的改良,我以前寫(xiě)過(guò)這樣一篇優(yōu)化文章,詳細(xì)直接點(diǎn)擊該文了解《策略枚舉:消除在項(xiàng)目里大批量使用if-else的優(yōu)雅姿勢(shì)》

二、使用三目運(yùn)算符來(lái)優(yōu)化if-else

1、根據(jù)if-else條件來(lái)判斷賦值的,如:

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

利用三目運(yùn)算符,可以直接優(yōu)化成一行代碼:

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

2、利用if-else條件來(lái)判斷調(diào)用方法,如:

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

利用三目運(yùn)算符,可以直接優(yōu)化成:

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

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

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

它們的使用方式其實(shí)很簡(jiǎn)單:

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

可見(jiàn),根據(jù)以上三種實(shí)現(xiàn)方式,可以在某種程度上優(yōu)化if里判斷條件過(guò)多的情況,那么,在哪種場(chǎng)景里比較合適利用其優(yōu)化呢?

在日常實(shí)際開(kāi)發(fā)當(dāng)中,我們可能會(huì)看到過(guò)這樣存在很多判斷條件的代碼:

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

這時(shí),就可以考慮到,使用stream流來(lái)優(yōu)化,優(yōu)化后的代碼如下:

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

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

當(dāng)然,這只是針對(duì)或條件的,若是遇到與條件時(shí),同樣可以用Stream來(lái)優(yōu)化,例如:

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

使用Stream優(yōu)化后:

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

優(yōu)化量比較多的面向過(guò)程的if-else語(yǔ)句,還可以考慮使用Map來(lái)優(yōu)化,雖然在一定程度上,創(chuàng)建一個(gè)額外map會(huì)占用內(nèi)存,但那丁點(diǎn)內(nèi)存對(duì)于現(xiàn)階段計(jì)算機(jī)而言,可以說(shuō)不足掛齒。下面使用一個(gè)案例來(lái)介紹下————

在一些祖?zhèn)骼洗a當(dāng)中,可能遇到過(guò)類(lèi)似這樣又臭又冗余的if-else寫(xiě)法:

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

這時(shí),可以根據(jù)具體場(chǎng)景,來(lái)考慮是否可以利用Map優(yōu)化,使用Map優(yōu)化的方式,是先在該類(lèi)中定義一個(gè)static的map,類(lèi)似這樣:

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

定義完后,就直接在先前使用if-else的方法里,進(jìn)行這樣優(yōu)化:

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

這樣優(yōu)化后,業(yè)務(wù)方法里的判斷獲取值的處理,是不是就清爽了很多,當(dāng)然,這只是針對(duì)量比較多的if-else而言,若是比較少的判斷語(yǔ)句,再額外定義一個(gè)map來(lái)搞,隱約有畫(huà)蛇添足的嫌疑。

細(xì)心的讀者可能會(huì)發(fā)現(xiàn), 我在定義map的時(shí)候,使用到了一個(gè)ImmutableMap的東西,這是Google Guava里的一個(gè)類(lèi),可生成一個(gè)不可變的Map對(duì)象,這就意味著,初始化定義后,后續(xù)就無(wú)法再put修改了,它的這個(gè)特性可以保證線程的安全。一般用來(lái)替換if-else的map,我們就是要求在初始化定義后,就不會(huì)再允許修改了,因此,這個(gè)ImmutableMap生成的map,可以很好地幫我們實(shí)現(xiàn)這一點(diǎn)。另外,最重要一點(diǎn)是,使用這個(gè)ImmutableMap,可以實(shí)現(xiàn)鏈?zhǔn)骄幊蹋拖裆厦娑x的鏈?zhǔn)綄?xiě)法,若是用傳統(tǒng)的map定義,就每次都要map.put()、map.put()地賦值。

關(guān)于ImmutableMap的原理,我專(zhuān)門(mén)寫(xiě)一篇文章來(lái)介紹:《Java源碼分析:Guava之不可變集合ImmutableMap的源碼分析》

五、使用枚舉優(yōu)化if-else

前面提到過(guò)可使用策略枚舉來(lái)優(yōu)化大批量的if-else,當(dāng)然,若只是判斷獲不同條件來(lái)取值的代碼,可以考慮直接使用枚舉來(lái)優(yōu)化,其效果與map的處理效果類(lèi)似。

還是用前面判斷課程的if-else為案例來(lái)優(yōu)化。

首先,先在類(lèi)中定義一個(gè)枚舉:

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

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

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

在實(shí)際工作中,我曾經(jīng)遇到類(lèi)似這樣的代碼,看起來(lái)像沒(méi)什么問(wèn)題,但如果其中某個(gè)屬性值不幸為null,那么,恭喜你,你將會(huì)喜提一個(gè)NullPointerException異常。

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

若要處理這個(gè)可能出現(xiàn)的空指針異常,傳統(tǒng)寫(xiě)法,可以寫(xiě)一堆if-else語(yǔ)句來(lái)處理,就像這樣子——

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

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

在遇到這種層層嵌套的if-else判斷時(shí),可以考慮使用jdk1.8新特性O(shè)ptional 類(lèi)來(lái)優(yōu)化,優(yōu)化后的效果如下,頓時(shí)又優(yōu)雅了很多。

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

本文屬于if-else優(yōu)化編程技巧總結(jié),后續(xù)若在實(shí)踐中有新收獲,將持續(xù)更新......

到此這篇關(guān)于淺談Java編程技巧之if-else的優(yōu)化總結(jié)的文章就介紹到這了,更多相關(guān)Java if-else的優(yōu)化內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
另类综合日韩欧美亚洲| 日本欧美一区二区| 日韩av一级片| 日韩av在线免费观看不卡| 国产精品日本| 三级在线观看一区二区| 亚洲二区三区不卡| 99在线精品视频在线观看| 在线视频亚洲| 亚洲永久字幕| 日本中文字幕一区二区视频| 日韩国产在线不卡视频| 97久久亚洲| 亚洲深夜视频| 蜜桃视频在线观看一区| 国产精品亚洲欧美| 国产在线看片免费视频在线观看| 国产h片在线观看| 亚洲欧洲一区二区天堂久久| 国产亚洲毛片在线| 清纯唯美亚洲综合一区| 精品国内亚洲2022精品成人| 亚洲www免费| 性色av一区二区怡红| 欧美亚洲人成在线| 午夜欧美巨大性欧美巨大| 亚洲我射av| 国产精品成人a在线观看| 好看的av在线不卡观看| 国产亚洲欧美日韩精品一区二区三区 | 国产精品三p一区二区| 日韩欧美一区二区三区在线观看 | 亚洲一区中文| 日韩激情综合| 91精品国产调教在线观看| 欧美成人亚洲| 蜜桃精品视频| 狠狠色综合网| 国产精品一卡| 国产精品一卡| 国产精品qvod| 欧美日韩精品一区二区三区视频| 婷婷综合社区| 久久亚洲美女| 国产精品17p| 国产亚洲欧美日韩精品一区二区三区| 久久狠狠久久| 91精品国产成人观看| 国产精品久久久久毛片大屁完整版| 三级一区在线视频先锋| 美女少妇全过程你懂的久久| 国产亚洲精品美女久久久久久久久久| 天堂日韩电影| 国产一区二区色噜噜| 国产精品久久久久蜜臀| 色婷婷综合网| 亚洲成人国产| 久久精品 人人爱| 精品色999| 天堂中文av在线资源库| 久久国际精品| 天堂va在线高清一区| 尤物精品在线| 伊人久久成人| 在线亚洲自拍| 国产一在线精品一区在线观看| 涩涩av在线| 精品亚洲a∨| 美女免费视频一区| 国内不卡的一区二区三区中文字幕| 国产在线一区不卡| 美女福利一区二区三区| 久久精品动漫| 一区免费视频| 日韩美女国产精品| 日韩精品91亚洲二区在线观看| 欧美日韩一区自拍| 国产一区二区三区视频在线| av高清不卡| 欧美在线资源| 日本国产亚洲| 精品国产第一福利网站| 久久久久欧美精品| 国产亚洲精品久久久久婷婷瑜伽| 亚洲午夜久久| 精品一区电影| 国产精品毛片在线| 国产伦乱精品| 亚洲特级毛片| 国产日韩欧美一区二区三区 | 国产精品久久观看| 91精品一区国产高清在线gif| 夜夜嗨网站十八久久| 国产精品片aa在线观看| 欧美日韩在线播放视频| 日韩 欧美一区二区三区| 欧美亚洲日本精品| 日韩免费精品| 欧美日韩精品一本二本三本| 国产精品成人国产| 亚洲一区观看| 日韩免费av| 欧美日本精品| 亚洲一区网站| 在线成人直播| 国产精品高潮呻吟久久久久| 欧美日韩国产亚洲一区| 国产精品九九| 亚洲欧美日韩精品一区二区| 91综合视频| 国产伦理久久久久久妇女| 亚洲黄色在线| 91精品综合| 日韩三区在线| 国产一区二区三区精品在线观看| 日韩在线网址| 日韩中文字幕亚洲一区二区va在线| 日韩精品不卡一区二区| 欧美精品不卡| 国产视频网站一区二区三区| 久久中文亚洲字幕| 欧美国产一级| 精品视频自拍| 麻豆国产91在线播放| 欧美在线不卡| 久久国内精品| 国产免费久久| 美日韩一区二区三区| 美女视频黄 久久| 国产一区二区三区视频在线| 精品国产亚洲一区二区三区| 久久一区视频| 成人在线丰满少妇av| 日韩av免费| 欧美日韩精品一区二区视频| 久久久免费人体| 黄色网一区二区| 蜜桃精品在线| 玖玖玖国产精品| 综合激情在线| 国产乱论精品| 天堂√中文最新版在线| 亚洲电影在线一区二区三区| 亚洲一区二区毛片| 国产丝袜一区| 欧美日韩国产v| 久久最新视频| 九九99久久精品在免费线bt| 久久夜夜操妹子| 免费人成在线不卡| 国产人成精品一区二区三| 国产suv精品一区二区四区视频| 99久久激情| 色狠狠一区二区三区| 久久精品国产网站| 五月婷婷六月综合| 日本va欧美va精品发布| 亚洲国产福利| 天堂va欧美ⅴa亚洲va一国产| 免费一区二区三区在线视频| 亚洲天堂久久| 欧美一区在线观看视频| 免费成人网www| 日本国产欧美| 国产综合激情| 欧美日韩一区二区国产| 在线日韩视频| 精品视频一区二区三区在线观看| 影音先锋国产精品| 精品少妇av| 91精品一区| 美女日韩在线中文字幕| 国产盗摄——sm在线视频| 日本午夜精品视频在线观看| 欧美日韩激情| 欧美韩日一区| 九九99久久精品在免费线bt| 日韩视频1区| 香蕉精品视频在线观看| 国产一区二区三区不卡视频网站| 国产婷婷精品| 在线一区电影| 日本欧美不卡| 四虎国产精品免费观看| 国产日产一区| 午夜日韩影院| 日本色综合中文字幕| 亚洲精品福利| 蜜桃久久久久久久| 在线亚洲国产精品网站| 欧美日韩国产传媒| 成人av二区| 在线国产一区二区| 国产精品美女久久久| 91精品国产调教在线观看| 色婷婷亚洲mv天堂mv在影片| 老司机免费视频一区二区三区| 国产激情久久| 成人国产精品| 日韩福利一区|