Java 把列表元素拼接字符串
摘要:使用 Java Collectors.joining等方法把List中的所有元素通過指定的分隔符拼接為字符串。
綜述
??在項目開發中,經常遇到的一個問題就是要把一個集合轉換成字符串,故在今天的分享中,我們將一起學習如何把列表中的所有元素連接成由指定分隔符分隔的字符串。本文使用的列表List如下:
List<Integer> integerList = Stream.of(1, 2, 3, 6, 7, 9).collect(Collectors.toList());
??這種定義List的方式采用的是Java 8 的Stream,所構建的list支持動態擴容。
使用For循環
??基于 for 循環拼接字符串是最常見的一個方法,示例如下:
/**
* 基于for 循環拼接字符串
*/
public static String forMethod(List<Integer> list, String separator) {
// 校驗是否為空
if (list.isEmpty()) {
return "";
}
StringBuilder sb = new StringBuilder();
for (int i = 0, len = list.size(); i < len; i++) {
sb.append(list.get(i)).append(separator);
}
//去掉最后一個分隔符號
return sb.substring(0, sb.length() - 1);
}
StringUtils.join 函數
??使用封裝好的類StringUtils時,需要導入相關的包org.apache.commons.lang3.StringUtils,它依賴 jar 包 commons-lang3。
public static String joinMethod(List<Integer> list, String separator) {
return StringUtils.join(list, separator);
}
其源碼實現如下:
public static String join(Iterable<?> iterable, String separator) {
return iterable == null ? null : join(iterable.iterator(), separator);
}
??第一個參數iterable表示實現了此接口的集合對象,集合Collection、List、Set都是Iterable的實現類;Iterable接口是Java集合框架的頂級接口,實現此接口使集合對象可以通過迭代器遍歷自身元素。
??第二個參數separator表示拼接集合元素的時候使用的分隔符,這樣一來就省去很多中間轉換的步驟,可以直接得到我們預期的字符串。
Collectors.joining(Function) 函數
??Stream下的Collectors.joining(Function):用于將元素連接之后返回字符串,同樣可以自定義分隔符。
public static String joiningMethod(List<Integer> list, String separator) {
return list.stream()
.map(String::valueOf)
.collect(Collectors.joining(separator));
}
??Stream的優秀之處就在于其可以同時處理其它業務邏輯,讓代碼邏輯更加的原汁原味、一氣呵成。如果純粹是拼接字符串的訴求,確實沒有必要使用它,畢竟殺雞焉用牛刀!但是我們可以在拼接字符串的同時,實現其它功能。讓我們通過下面的示例來感受一下使用Stream進行字符串拼接的真正魅力吧!
public static String joiningPlusMethod(List<Integer> list, String separator) {
return list.stream()
.map(String::valueOf)
.collect(Collectors.joining(separator, "[", "]"));
}
功能:結合Stream流操作,在拼接后的字符串前后添加中括號。彰明較著,其它函數無法直接實現這個需求。
Guava Joiner join 函數
??使用 Google Guava 中的 com.google.common.base.Joiner 類拼接成字符串。
public static String guavaJoinMethod(List<Integer> list, String separator) {
return Joiner.on(separator).join(list);
}
??返回一個字符串。該字符串是通過把 list 的每個元素轉換為字符串,然后把這些字符串連接起來,在兩個元素之間插入 separator 字符串而生成的。
String.join 函數
public static String stringJoinMethod(List<String> list, String separator) {
return String.join(separator, list);
}
??該函數只適用于字符串List,返回一個字符串。該字符串是通過把 list 的元素連接起來,在兩個元素之間插入 separator 字符串而生成的。
??總的示例如下:
import org.apache.commons.lang3.StringUtils;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.google.common.base.Joiner;
public static void main(String[] args) {
String separator = "-";
List<Integer> list = initList();
String result = forMethod(list, separator);
System.out.println("----- forMethod -----" + result);
System.out.println("----- joinMethod -----" + joinMethod(list, separator));
System.out.println("----- joiningPlusMethod 添加特殊符號-----" + joiningPlusMethod(list, delimiter));
System.out.println("----- streamMapMethod -----" + joiningMethod(list, separator));
System.out.println("----- guavaJoinMethod -----" + guavaJoinMethod(list, separator));
}
??執行后,控制臺打印結果如下:
----- forMethod -----1-2-3-6-7-9
----- joinMethod -----1-2-3-6-7-9
----- streamMapMethod -----1-2-3-6-7-9
----- joiningPlusMethod 添加特殊符號-----[1-2-3-6-7-9]
----- guavaJoinMethod -----1-2-3-6-7-9
結束語
??大家如果對于本文介紹的內容有不理解的地方,請在評論區留言。如果碰到【相關】問題也可以在評論區留言,和諸位互動交流。三人行必有我師,一起進步。大家可隨意盡情享用本文啦!
Buy me a coffee. ?Get red packets.
浙公網安備 33010602011771號