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

淺談Java8對字符串連接的改進(jìn)正確姿勢

 更新時間:2019年10月25日 09:54:57   作者:Coder編程  
這篇文章主要介紹了Java8:對字符串連接的改進(jìn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(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);
}

運(yùn)行結(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);
}

運(yùn)行結(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 來實(shí)現(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);
}

運(yùn)行結(jié)果:

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

函數(shù):!

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

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

oining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)方法,即分隔符為 delimiter,前綴為 prefix,后綴為 suffix(底層實(shí)現(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);
}

運(yùn)行結(jié)果:

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

以上就是本文的全部內(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é)點(diǎn)Java學(xué)院整理

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

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

    java日期處理工具類

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

    java8版本base64加密解密的實(shí)例

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

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

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

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

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

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

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

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

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

    java ZXing生成二維碼及條碼實(shí)例分享

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

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

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

最新評論

鹰潭市| 交口县| 西乌| 东光县| 杭锦旗| 章丘市| 礼泉县| 蕲春县| 黔南| 东兰县| 兴化市| 云浮市| 阿拉善左旗| 平潭县| 易门县| 呼玛县| 洪雅县| 科技| 绥棱县| 宁都县| 七台河市| 邹城市| 石屏县| 涿鹿县| 泾阳县| 涟源市| 富裕县| 鄂伦春自治旗| 宽城| 甘德县| 尚义县| 文昌市| 浙江省| 星座| 高州市| 晋宁县| 天峻县| 昌乐县| 伊宁市| 长宁区| 雅江县|