在业务代码中,我们经常需要用逗号拼接多个字符串,但是,我看到很多代码还在使用下面这种方式拼接,一点都不拉风【特朗普式嘲讽.jpg】。
public static String dealWithStr(List<String> list){
StringBuffer buffer = new StringBuffer();
for(int i = 0 ; i < list.size() ; i++){
buffer.append(list.get(i));
if(i < list.size() - 1){
buffer.append(",");
}
}
return buffer.toString();
}
其实,对于这种场景,有很优雅的处理方式,一行代码就足够了!
下面介绍三种方式,均是java8以后的新特性
1. String.join
static String join(CharSequence delimiter, CharSequence... elements)
static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
我们来看看java 8 API的描述
static String join(CharSequence delimiter, CharSequence... elements)
static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
我来测试一下
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("甄姬");
list.add("鲁班");
list.add("程咬金");
list.add("李白");
list.add("刘禅");
System.out.println(String.join(",", list));//甄姬,鲁班,程咬金,李白,刘禅
}
这个方法很简单,使用String类调用它的静态方法join,第一个参数传分隔符,第二个参数可以是数组,也可以是集合。返回值就是被处理过的字符串。
2. 使用stream流的Collectors.joining
list.stream().collect(Collectors.joining(","))
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("甄姬");
list.add("鲁班");
list.add("程咬金");
list.add("李白");
list.add("刘禅");
String dealWithStr = list.stream().collect(Collectors.joining(","));
System.out.println(dealWithStr);//甄姬,鲁班,程咬金,李白,刘禅
}
3. 使用stream流的reduce
list.stream().reduce((a,b)->a + "," + b).get()
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("甄姬");
list.add("鲁班");
list.add("程咬金");
list.add("李白");
list.add("刘禅");
String dealWithStr = list.stream().reduce((a,b)->a + "," + b).get();
System.out.println(dealWithStr);//甄姬,鲁班,程咬金,李白,刘禅
}
第二种和第三种都使用到了stream流,之后有时间我会把java8的这个新特性好好和大家整理整理。
这三种方法还算拉风吧哈哈哈