欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

毋庸置疑, Java8 之前我們的第一反應是使用 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);
}

運行結果:

JDK1.8 時,添加了一個新的用于字符串連接的類,專門用于這種需要 分隔符 的場合,它就是 StringJoiner 。 StringJoiner 在構造時可以指定一個分隔符(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);
}

運行結果:

formatList 的代碼更加的簡潔了 —— 當然我們還可以更簡潔 —— 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);
}

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

但是我們看到了 String.join 方法的不足 —— 它不能指定前綴和后綴 —— 比如我們如果想要直接將 List<String> 格式化為 { 元素1, 元素2, 元素3, ... 元素N } 呢?(此時前綴為 "{ " ,后綴為 " }"

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

修改 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);
}

運行結果:

很棒~ 但能不能更簡潔呢? 事實上, 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);
}

運行結果:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • ElasticSearch?深度分頁示例解析

    ElasticSearch?深度分頁示例解析

    這篇文章主要為大家介紹了ElasticSearch?深度分頁示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 一文讀懂a(chǎn)va中的Volatile關鍵字使用

    一文讀懂a(chǎn)va中的Volatile關鍵字使用

    volatile關鍵字的作用保證了變量的可見性(visibility)。被volatile關鍵字修飾的變量,如果值發(fā)生了變更,其他線程立馬可見,避免出現(xiàn)臟讀的現(xiàn)象。這篇文章主要介紹了ava中的Volatile關鍵字使用,需要的朋友可以參考下
    2020-03-03
  • Spring Boot快速入門教程

    Spring Boot快速入門教程

    本篇文章主要介紹了Spring Boot快速入門教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • java實現(xiàn)字符串匹配求兩個字符串的最大公共子串

    java實現(xiàn)字符串匹配求兩個字符串的最大公共子串

    這篇文章主要介紹了java實現(xiàn)求兩個字符串最大公共子串的方法,詳細的描述了兩個字符串的最大公共子串算法的實現(xiàn),需要的朋友可以參考下
    2016-10-10
  • Java超詳細分析講解final關鍵字的用法

    Java超詳細分析講解final關鍵字的用法

    關于final關鍵字,它也是我們一個經(jīng)常用的關鍵字,可以修飾在類上、或者修飾在變量、方法上,以此看來定義它的一些不可變性!像我們經(jīng)常使用的String類中,它便是final來修飾的類,并且它的字符數(shù)組也是被final所修飾的。但是一些final的一些細節(jié)你真的了解過嗎
    2022-06-06
  • 舉例講解Java的Hibernate框架中的多對一和一對多映射

    舉例講解Java的Hibernate框架中的多對一和一對多映射

    這篇文章主要介紹了Java的Hibernate框架中的多對一和一對多映射,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • java控制臺輸出版多人聊天室

    java控制臺輸出版多人聊天室

    這篇文章主要為大家詳細介紹了java控制臺輸出版多人聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • java字符串遍歷以及統(tǒng)計字符串中各類字符

    java字符串遍歷以及統(tǒng)計字符串中各類字符

    這篇文章主要為大家詳細介紹了java字符串遍歷以及字符串中各類字符統(tǒng)計,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • springboot下添加日志模塊和設置日志文件輸出的方法

    springboot下添加日志模塊和設置日志文件輸出的方法

    日志的使用將通過SLF4J來使用,SLF4J是一個為Java應用提供簡單日志記錄的接口,在Spring框架中,SLF4J常常用于處理框架本身以及應用程序的日志記錄,本文給大家介紹springboot下添加日志模塊和設置日志文件輸出的相關知識,感興趣的朋友一起看看吧
    2023-12-12
  • Java規(guī)則引擎Easy Rules的使用介紹

    Java規(guī)則引擎Easy Rules的使用介紹

    這篇文章主要介紹了Java規(guī)則引擎Easy Rules的使用介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06

最新評論