Java將List轉(zhuǎn)換為String的幾種常見(jiàn)方式
將 List 轉(zhuǎn)換為 String的幾種方式
- 使用 List的toString()方法將 List 轉(zhuǎn)換為 String;結(jié)果前后會(huì)帶有英文的中括號(hào)[],如:[1, 2, 3, 4, 5]
- 使用Java8 stream流中的Collections.joining()方法,帶有逗號(hào)分隔符或自定義分隔符將集合轉(zhuǎn)成String字符串
- 使用String.join()方法將帶有逗號(hào)分隔符或自定義分隔符的集合轉(zhuǎn)換為字符串
- 使用Apache commons包下的StringUtils.join()方法;轉(zhuǎn)成的String結(jié)尾帶有分隔符小尾巴,如:"張三,李四,"
- 使用 StringBuilder、StringBuffer的append方法自定義join()方法
第一種:List.toString方法
List.toString()產(chǎn)生的結(jié)果會(huì)在開(kāi)頭和結(jié)尾添加英文中括號(hào),每個(gè)字符串用逗號(hào)分隔符分隔(分隔符不可更變)。如果我們想去掉方括號(hào)的話(huà),需要借助String.replaceAll方法。
/** * List的toString方法,結(jié)果前后會(huì)帶有英文的中括號(hào)[],如:[1, 2, 3, 4, 5] */ public static void main(String[] args) { List<Integer> asList = Arrays.asList(1, 2, 3, 4, 5); String list2String = asList.toString(); System.out.println(list2String); //使用replaceAll方法替換 中括號(hào) list2String = list2String.replaceAll("\\[|]", ""); System.out.println(list2String); }
第二種:Stream流轉(zhuǎn)String
java8 stream中提供了Collectors.join()方法可用于將集合轉(zhuǎn)成為具有指定分隔符、前綴和后綴的字符串。
public class Demo2 { /** * List 轉(zhuǎn) String * stream流中的Collections.joining方法 **/ public static void main(String[] args) { List<String> list = Arrays.asList("張三", "李四", "王武", null, "麻子"); //java stream流中的Collections.joining方法 //指定分隔符 String collect = list.stream().collect(Collectors.joining(",")); //沒(méi)有分隔符,直接拼接 String collect1 = list.stream().collect(Collectors.joining()); //指定分隔符,前綴,后綴 String collect2 = list.stream().collect(Collectors.joining(",", "{", "}")); System.out.println(collect);//張三,李四,王武,null,麻子 System.out.println(collect1);//張三李四王武null麻子 System.out.println(collect2);//{張三,李四,王武,null,麻子} } }
第三種:String.join()方法
java8 String添加了一個(gè)特殊的Join方法,用于將集合轉(zhuǎn)換為指定分隔符連接的字符串。
/** * String.join() **/ public static void main(String[] args) { List<String> list = Arrays.asList("張三", "李四", "王武", null, "麻子"); String join = String.join(",", list); System.out.println(join);//張三,李四,王武,null,麻子 }
第四種:StringUtils.join()方法
Apache commons包的外部庫(kù)有一個(gè)方法StringUtils.join() 方法,它類(lèi)似于 String.join() 方法,用于將集合轉(zhuǎn)成指定分隔符鏈接的字符串;但是,如果集合中有null的話(huà),會(huì)被轉(zhuǎn)換成空串。
/** * StringUtils.join() **/ public static void main(String[] args) { List<String> list = Arrays.asList("張三", "李四", "王武", null, "麻子"); //StringUtils.join方法,集合中有null的話(huà),會(huì)轉(zhuǎn)成空串"" String join = StringUtils.join(list, ","); System.out.println(join); //張三,李四,王武,,麻子 }
第五種:自定義Join方法
java中提供了StringBuilder、StringBuffer兩個(gè)類(lèi),可以使用他們提供的append方法自定義join方法,將集合轉(zhuǎn)成字符串。
/** * StringBuilder、StringBuffer的append()方法 **/ public static void main(String[] args) { List<String> list = Arrays.asList("張三", "李四", "王武", null, "麻子"); //3. StringBuilder、StringBuffer的append方法自定義join方法 StringBuilder sb = new StringBuilder(); for (String s : list) { sb.append(s).append(","); } //sb.insert(0, "join如下:"); if (sb.length() > 1) { sb.deleteCharAt(sb.length() - 1); } System.out.println(sb.toString()); //張三,李四,王武,null,麻子 }
邏輯如上,上面邏輯可以封賬成一個(gè)通用的join方法
public class Demo2 { public static class ListJoin<E> { public String join(String delimiter, Collection<? extends E> list) { Objects.requireNonNull(delimiter); Objects.requireNonNull(list); StringBuilder result = new StringBuilder(); for (E obj : list) { //根據(jù)需要對(duì)空進(jìn)行處理 if (Objects.isNull(obj)) { continue; } result.append(obj).append(delimiter); } if (result.length() > 1) { result.deleteCharAt(result.length() - 1); } return result.toString(); } } /** * StringBuilder、StringBuffer的append()方法 **/ public static void main(String[] args) { List<String> list = Arrays.asList("張三", "李四", "王武", null, "麻子"); //上述join方法可以修改成通用的join方法 ListJoin<String> strDemo = new ListJoin<>(); String join = strDemo.join(",", list); System.out.println(join); //張三,李四,王武,麻子 ListJoin<Integer> intDemo = new ListJoin<>(); List<Integer> asList = Arrays.asList(1, 2, 3, 4, 5); String intJoin = intDemo.join("-", asList); System.out.println(intJoin); //1-2-3-4-5 } }
以上方式都可以將List集合轉(zhuǎn)成字符串,具體根據(jù)業(yè)務(wù)需要使用不同方式。
附:List轉(zhuǎn)String時(shí)注意事項(xiàng)
Object類(lèi)是所有對(duì)象類(lèi)的父類(lèi),而toString方法只能把那些可以轉(zhuǎn)換為字符串的類(lèi)型對(duì)象轉(zhuǎn)換為字符串,否則轉(zhuǎn)換后還是一個(gè)對(duì)象。
例如:
“woshizifuchuan”是一個(gè)String類(lèi)型的對(duì)象,“woshizifuchuan”.toString();結(jié)果還是“woshizifuchuan”;
Org是一個(gè)組織的對(duì)象,如果Org.toString();結(jié)果是不正常的,因?yàn)镺rg對(duì)象中可能有多個(gè)屬性,如組織名稱(chēng),組織等,這個(gè)toString后無(wú)法知道具體的是那個(gè)屬性轉(zhuǎn)換為字符串,所以就不會(huì)正常顯示。
備注:所有的java開(kāi)發(fā)都是有一定原則的,不是說(shuō)不報(bào)錯(cuò)就一切運(yùn)行ok,要根據(jù)實(shí)際情況進(jìn)行類(lèi)型轉(zhuǎn)換。
你先看一下Object類(lèi)中的toString()方法源碼:
public String toString() { return getClass().getName() +"@"+Integer.toHexString(hashCode()); //打印類(lèi)的全命名+內(nèi)存地址 }
假如你的類(lèi)復(fù)寫(xiě)了Object類(lèi)(此類(lèi)為Java根基類(lèi))中的toString()方法;
例如:
public String toString(){ return "name:" + this.name+ ", pwd:"+this.pwd; //這里才是你要返回的值 如果沒(méi)復(fù)寫(xiě)則調(diào)用Object類(lèi)中的toString()方法,所以具體輸出形式自己定 }
還可以在項(xiàng)目中引入fastjson.jar包,將對(duì)象轉(zhuǎn)為字符串很簡(jiǎn)單的。
調(diào)用JSON.toJSONString(Org)轉(zhuǎn)為json字符串。
總結(jié)
到此這篇關(guān)于Java將List轉(zhuǎn)換為String的幾種常見(jiàn)方式的文章就介紹到這了,更多相關(guān)Java將List轉(zhuǎn)換為String內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java調(diào)用DeepSeek?api實(shí)現(xiàn)方法記錄
這篇文章主要介紹了如何在Java中調(diào)用DeepSeek?API,包括在官網(wǎng)獲取APIKeys、創(chuàng)建API請(qǐng)求工具類(lèi)以及處理返回結(jié)果的步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02SpringBoot與spring security的結(jié)合的示例
這篇文章主要介紹了SpringBoot與spring security的結(jié)合的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03SpringBoot實(shí)現(xiàn)登錄攔截的示例代碼
如果我們不進(jìn)行登錄攔截的話(huà),即使我們跳過(guò)登錄頁(yè)面直接去訪(fǎng)問(wèn)任意一個(gè)頁(yè)面也能訪(fǎng)問(wèn)成功,那么登錄功能就沒(méi)有意義,同時(shí)也會(huì)存在安全問(wèn)題,本文就來(lái)介紹一下SpringBoot登錄攔截,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09Spring Cloud Feign報(bào)錯(cuò)問(wèn)題解決
這篇文章主要介紹了Spring Cloud Feign報(bào)錯(cuò)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12swagger配置正式環(huán)境中不可訪(fǎng)問(wèn)的問(wèn)題
這篇文章主要介紹了swagger配置正式環(huán)境中不可訪(fǎng)問(wèn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06springBoot整合shiro如何解決讀取不到@value值問(wèn)題
這篇文章主要介紹了springBoot整合shiro如何解決讀取不到@value值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-08-08