最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Java8對字符串連接的改進正確姿勢

 更新時間:2019年10月25日 09:54:57   作者:Coder編程  
這篇文章主要介紹了Java8:對字符串連接的改進,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

我們提出一個需求:有一個 List<String>,將其格式化為 元素1, 元素2, 元素3, ... 元素N 的字符串形式。

毋庸置疑, Java8 之前我們的第一反應(yīng)是使用 StringBuilder

public static String formatList(List<String> list, String delimiter) {
 StringBuilder result = new StringBuilder();
 for (String str : list) {
  result.append(str).append(delimiter);
 }
 // 刪除末尾多余的 delimiter
 result.delete(result.length() - delimiter.length(), result.length()); 
 
 return result.toString();
}

public static void main(String[] args) throws Exception {
 List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f", "g");

 System.out.println("使用 StringBuilder:");
 String format = formatList(list, ", ");
 System.out.println(format);
}

運行結(jié)果:

JDK1.8 時,添加了一個新的用于字符串連接的類,專門用于這種需要 分隔符 的場合,它就是 StringJoiner 。 StringJoiner 在構(gòu)造時可以指定一個分隔符(delimiter),然后每連接一個元素它便會加上一個 delimiter ,使用 StringJoiner 改寫 formatList

public static String formatList(List<String> list, String delimiter) {
 StringJoiner result = new StringJoiner(delimiter);
 for (String str : list) {
  result.add(str);
 }
 return result.toString();
}

public static void main(String[] args) throws Exception {
 List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f", "g");

 System.out.println("使用 StringJoiner:");
 String format = formatList(list, ", ");
 System.out.println(format);
}

運行結(jié)果:

formatList 的代碼更加的簡潔了 —— 當(dāng)然我們還可以更簡潔 —— JDK1.8 為 String 類添加了一個新的靜態(tài)方法, String.join

可以看到,第一個參數(shù)為一個分隔符 delimiter ,第二個參數(shù)可以是一個 Iterable ,或者是一個變長參數(shù)的 CharSequenceString 就是 CharSequence 的子類)。 所以 formatList 方法只需要一句代碼就搞定:

public static String formatList(List<String> list, String delimiter) {
 return String.join(delimiter, list);
}

當(dāng)然,我們能猜到, String.join 方法的功能內(nèi)部是通過 StringJoiner 來實現(xiàn)的, String.join (CharSequence, Iterable) 的源碼:

但是我們看到了 String.join 方法的不足 —— 它不能指定前綴和后綴 —— 比如我們?nèi)绻胍苯訉?List<String> 格式化為 { 元素1, 元素2, 元素3, ... 元素N } 呢?(此時前綴為 "{ " ,后綴為 " }"

查看 StringJoiner 的構(gòu)造方法,發(fā)現(xiàn) StringJoiner 除了指定 分隔符 的構(gòu)造方法,還有一個可以指定 分隔符、前綴和后綴 的構(gòu)造方法:

修改 formatList

public static String formatList(
  List<String> list, String delimiter, String prefix, String suffix) {

 StringJoiner result = new StringJoiner(delimiter, prefix, suffix);
 for (String str : list) {
  result.add(str);
 }
 return result.toString();
}

public static void main(String[] args) throws Exception {
 List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f", "g");

 System.out.println("使用 StringJoiner,帶前綴和后綴:");
 String format = formatList(list, ", ", "{ ", " }");
 System.out.println(format);
}

運行結(jié)果:

很棒~ 但能不能更簡潔呢? 事實上, Java8 對于字符串集合的連接操作提供了一個專門的流式 API,即 Collectors.joining

函數(shù):!

無參的 joining() 方法,即不存在連接符(底層實現(xiàn)為 StringBuilder);

joining(CharSequence delimiter) 方法,即分隔符為 delimiter(底層實現(xiàn)為 StringJoiner);j

oining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)方法,即分隔符為 delimiter,前綴為 prefix,后綴為 suffix(底層實現(xiàn)為 StringJoiner)。

那怎么使用呢? 我們直接使用三個參數(shù)的 Collectors.joining 方法改寫 formatList:

public static String formatList(
  List<String> list, String delimiter, String prefix, String suffix) {

 return list.stream().collect(Collectors.joining(delimiter, prefix, suffix));
}

public static void main(String[] args) throws Exception {
 List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f", "g");

 System.out.println("使用 Collectors.joining:");
 String format = formatList(list, ", ", "{ ", " }");
 System.out.println(format);
}

運行結(jié)果:

查看 StringJoiner 的源碼,我們可以知道 StringJoiner 的底層實現(xiàn)就是 StringBuilder —— Java8 將 使用分隔符連接多個字符串 這一功能進行封裝,提供這么多易用且簡介的 API,確實在很大程度上方便了編碼。

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

相關(guān)文章

  • Java讀取properties文件連接數(shù)據(jù)庫的方法示例

    Java讀取properties文件連接數(shù)據(jù)庫的方法示例

    這篇文章主要介紹了Java讀取properties文件連接數(shù)據(jù)庫的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Java concurrency集合之ArrayBlockingQueue_動力節(jié)點Java學(xué)院整理

    Java concurrency集合之ArrayBlockingQueue_動力節(jié)點Java學(xué)院整理

    ArrayBlockingQueue是數(shù)組實現(xiàn)的線程安全的有界的阻塞隊列。下面通過本文給大家介紹Java concurrency集合之ArrayBlockingQueue的相關(guān)知識,感興趣的朋友一起看看吧
    2017-06-06
  • java日期處理工具類

    java日期處理工具類

    這篇文章主要為大家詳細介紹了java日期處理工具類,其次還介紹了日期處理的基礎(chǔ)知識,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • java8版本base64加密解密的實例

    java8版本base64加密解密的實例

    下面小編就為大家分享一篇java8版本base64加密解密的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • java實現(xiàn)上傳圖片尺寸修改和質(zhì)量壓縮

    java實現(xiàn)上傳圖片尺寸修改和質(zhì)量壓縮

    這篇文章主要為大家詳細介紹了java實現(xiàn)上傳圖片尺寸修改和質(zhì)量壓縮,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java數(shù)據(jù)結(jié)構(gòu)之棧與隊列實例詳解

    Java數(shù)據(jù)結(jié)構(gòu)之棧與隊列實例詳解

    這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之棧與隊列的相關(guān)資料,算是作為用java描述數(shù)據(jù)結(jié)構(gòu)的一個開始,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-11-11
  • 淺析SpringBoot統(tǒng)一返回結(jié)果的實現(xiàn)

    淺析SpringBoot統(tǒng)一返回結(jié)果的實現(xiàn)

    前后端開發(fā)過程中數(shù)據(jù)交互規(guī)范化是一件非常重要的事情,不僅可以減少前后端交互過程中出現(xiàn)的問題,也讓代碼邏輯更加具有條理,下面小編就和大家講講SpringBoot如何統(tǒng)一返回結(jié)果的吧
    2023-07-07
  • Java序列化中子類、父類構(gòu)造函數(shù)問題實例分析

    Java序列化中子類、父類構(gòu)造函數(shù)問題實例分析

    這篇文章主要介紹了Java序列化中子類、父類構(gòu)造函數(shù)問題,結(jié)合實例形式分析了java父類與子類構(gòu)造函數(shù)中序列化接口調(diào)用相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下
    2019-09-09
  • java ZXing生成二維碼及條碼實例分享

    java ZXing生成二維碼及條碼實例分享

    本文分享了java ZXing生成二維碼及條碼的實例代碼,具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • java實現(xiàn)自定義日期選擇器的方法實例

    java實現(xiàn)自定義日期選擇器的方法實例

    日期選擇器是我們?nèi)粘i_發(fā)中經(jīng)常需要用到的一個功能,下面這篇文章主要給大家介紹了關(guān)于利用java實現(xiàn)自定義日期選擇器的相關(guān)資料,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10

最新評論

阿巴嘎旗| 江油市| 青浦区| 永州市| 怀化市| 大同市| 阳曲县| 永兴县| 井陉县| 新巴尔虎左旗| 华池县| 武隆县| 乌鲁木齐市| 丰都县| 丹巴县| 喜德县| 安乡县| 喀喇沁旗| 长春市| 油尖旺区| 荆州市| 河源市| 云浮市| 韶山市| 华容县| 蓝山县| 且末县| 开封县| 颍上县| 弥勒县| 土默特右旗| 南昌市| 乌什县| 永福县| 绩溪县| 西林县| 安康市| 肥乡县| 浮梁县| 巨鹿县| 尉氏县|