激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語言 - Java教程 - Java8特性使用Function代替分支語句

Java8特性使用Function代替分支語句

2020-09-09 13:52一馬平川1 Java教程

這篇文章主要介紹了Java8特性使用Function代替分支語句,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

傳統(tǒng)的多分支方式(圈復(fù)雜度為6):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public String order(String type) {
  if ("1".equals(type)) {
    return "1";
  } else if ("2".equals(type)) {
    return "2";
  } else if ("3".equals(type)) {
    return "3";
  } else if ("4".equals(type)) {
    return "4";
  } else if ("5".equals(type)) {
    return "5";
  } else {
    return "none";
  }
}

使用Function函數(shù)式編程的新方式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private Map<String, Function<String, String>> map = new HashMap<>();
 
public String order2(String type){
  init();
  Function<String, String> fun = map.get(type);
  String result = fun.apply(type);
  return result;
}
public void init() {
  map.put("1", a -> {
    System.out.println("執(zhí)行1分支");
    return a + "1";
  });
  map.put("2", a -> {
    System.out.println("執(zhí)行2分支");
    return a + "22";
  });
  map.put("3", a -> {
    System.out.println("執(zhí)行3分支");
    return a + "333";
  });
  map.put("4", a -> {
    System.out.println("執(zhí)行4分支");
    return a + "4444";
  });
  map.put("5", a -> {
    System.out.println("執(zhí)行5分支");
    return a + "55555";
  });
}

圈復(fù)雜度為0;

總結(jié):

1.Function是一個接口,它完整的樣子是這樣: Function<T,R>,其中T表示接受一個T類型的入?yún)?R表示返回一個R類型的出參,注意: 既然入?yún)⒑统鰠⒍际且粋€泛型,那就說明可以適用于任何種類的方法,如果方法需要多個入?yún)?可以把它們封裝成T類型的入?yún)O, 如果出參也需要有多個參數(shù),也可以把它們封裝為一個R類型的出參VO.

2. apply方法是function函數(shù)的統(tǒng)一執(zhí)行標(biāo)志性方法,它接受第一條提到的T t,返回第一條提到的R r,不管function函數(shù)體有多復(fù)雜,統(tǒng)統(tǒng)按apply執(zhí)行,就像所有的線程統(tǒng)統(tǒng)用start開始執(zhí)行.

3. 以前在有很多if-else的場合時,也想過把決定分支的入?yún)?用type表示)和所執(zhí)行的代碼建立映射關(guān)系,但那時候因為不懂Function,心里想Map里面只能裝數(shù)據(jù)類型,像分支邏輯這種不是數(shù)據(jù)類型,沒法裝.如今學(xué)習(xí)了Function,發(fā)現(xiàn)它把代碼邏輯也封裝得了,正好滿足了我的設(shè)想.真的太好用了.

4. 以前用if-else執(zhí)行多分支時, 走入不同分支還需要一個個對照,現(xiàn)在用了函數(shù)式編程,直接根據(jù)map查映射關(guān)系就找到了,很是方便.

最后總結(jié):

以后遇到if-else較多的場合,可以考慮使用Function函數(shù)代替

普通的方法是將一種數(shù)據(jù)類型作為參數(shù), 而Function方法是將一種方法或表達(dá)式作為參數(shù).

=======================補充: 與策略模式的對比=======================

策略模式也是為了解決分支過多問題,此外它還解決另一個大問題: 避免代碼侵入, 新增策略不需要修改原有策略代碼.此處主要對比第一點: 解決分支過多

策略模式通過兩層結(jié)構(gòu),完美實現(xiàn)了傳入不同的策略,執(zhí)行不同的方案,這與if-else的目標(biāo)是一致的,當(dāng)然與Function的目標(biāo)也是一致的.

傳入1, 選擇策略1,執(zhí)行策略1

傳入2,選擇策略2, 執(zhí)行策略2

如何實現(xiàn)傳入N,就能選擇策略N呢? 使用映射表Map<String, Strategy>, 這點和Function的思想是一樣,只不過策略模式通過類型獲取封裝好的策略實例,而Function通過類型獲取封裝好的策略方法.

從廣義上說, if-else, Function, 策略模式,它們?nèi)叨际遣呗?解決的都是分支問題,只不過粒度由小到大,重量級不同而已.

如何選擇呢?

能用if-else就不用Function,能用Function就不用策略模式

簡單的,就用輕量級的

復(fù)雜的,就用重量級的.

===============題外思考: Map的三種用法================

  • 初級: Map<String, 普通數(shù)據(jù)類型>======>通過一個數(shù)據(jù)可以獲取另一個數(shù)據(jù)
  • 中級: Map<String, 函數(shù)/表達(dá)式>=======> 通過一個數(shù)據(jù)可以獲取一個方法
  • 高級: Map<String, 模式>=============> 通過一個數(shù)據(jù)可以獲取一個設(shè)計

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://www.cnblogs.com/wangxuejian/p/13630024.html

延伸 · 閱讀

精彩推薦
548
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 国产精品久久久久国产精品三级 | 黄污网址 | 色婷婷综合久久久久中文 | 2019天天干夜夜操 | 国产精品99久久99久久久二 | 免费毛片a线观看 | 午夜爱爱福利 | 久久亚洲精品国产一区 | 国产免费高清在线 | 中文字幕电影免费播放 | 免费看成人毛片 | 黄色羞羞视频在线观看 | 久久在线免费视频 | 国产成人精品一区二区视频免费 | 奶子吧naiziba.cc免费午夜片在线观看 | 欧美日本色 | 免费毛片在线视频 | 亚洲无线看 | 色偷偷欧美 | 国产又白又嫩又紧又爽18p | 4399一级成人毛片 | 亚洲一区二区三区精品在线观看 | 成人久久 | 久久亚洲精品久久国产一区二区 | 777zyz色资源站在线观看 | 欧美日韩在线视频一区二区 | 在线免费视频a | 最新日韩中文字幕 | 国产一区网址 | 国产精品午夜在线观看 | 大西瓜永久免费av在线 | 亚洲精品一区二区三区免 | 欧美女孩videos| 国产精品三级a三级三级午夜 | 毛片a片 | 久久国产综合精品 | 欧美成人一区二区三区电影 | 一区二区三区欧洲 | 一级做受大片免费视频 | 日本不卡一区二区三区在线 | 一区二区三区无码高清视频 |