Java 字符串逗号拼接

在Java中,如果我们有这样一个List:

List list = ImmutableList.of("hello","qingyin","Java干货");如果我们想要把他拼接成一个以下形式的字符串:
hello,qingyin,Java干货可以通过以下方式:
StringBuilder builder = new StringBuilder();

if (!list.isEmpty()) {
    builder.append(list.get(0));
    for (int i = 1, n = list.size(); i < n; i++) {
        builder.append(",").append(list.get(i));
    }
}
builder.toString();还可以使用:
list.stream().reduce(new StringBuilder(), (sb, s) -> sb.append(s).append(','), StringBuilder::append).toString();但是输出结果稍有些不同,需要进行二次处理:
hello,qingyin,Java干货,还可以使用"+"进行拼接:
list.stream().reduce((a,b)->a + "," + b).toString();以上几种方式,要么是代码复杂,要么是性能不高,或者无法直接得到想要的结果。

为了满足类似这样的需求,Java 8中提供的StringJoiner就派上用场了。以上需求只需要一行代码:
 

list.stream().collect(Collectors.joining(","))即可。上面用的表达式中,Collectors.joining的源代码如下:
public static Collector joining(CharSequence delimiter,
                                                         CharSequence prefix,
                                                         CharSequence suffix) {
    return new CollectorImpl<>(
            () -> new StringJoiner(delimiter, prefix, suffix),
            StringJoiner::add, StringJoiner::merge,
            StringJoiner::toString, CH_NOID);
}其实现原理就是借助了StringJoiner。

当然,或许在Collector中直接使用StringBuilder似乎也可以实现类似的功能,只不过稍微麻烦一些。所以,Java 8中提供了StringJoiner来丰富Stream的用法。

而且StringJoiner也可以方便的增加前缀和后缀,比如我们希望得到的字符串是[hello,qingyin,Java干货]而不是hello,qingyin,Java干货的话,StringJoiner的优势就更加明显了。

你可能感兴趣的:(Java学习笔记)