将List转成String

常用方法

  1. StringBuilder实现
  2. String.join()
  3. Stream api 收集的方法joining()
  4. 方法2和3的底层实现StringJoiner

代码演示

public class StringJoinerTest {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        String delimiter = ", ";

        // 1.用StringBuilder实现
        StringBuilder sb = new StringBuilder(list.isEmpty() ? "" : list.get(0));
        for (int i = 1; i < list.size(); i++) {
            sb.append(delimiter).append(list.get(i));
        }
        System.out.println("method 1: " + sb.toString());

        // @since 1.8
        // 2.String.join()
        System.out.println("method 2: " + String.join(delimiter, list));

        // 3.Stream api 收集的方法joining()
        System.out.println("method 3.1: " + list.stream().collect(Collectors.joining()));
        System.out.println("method 3.2: " + list.stream().collect(Collectors.joining(delimiter)));
        System.out.println("method 3.3: " + list.stream().collect(Collectors.joining(delimiter, "{", "}")));

        // 4. 方法2和3的底层实现StringJoiner
        //StringJoiner sj = new StringJoiner(delimiter);
        StringJoiner sj = new StringJoiner(delimiter, "(", ")");
        for (String str : list) {
            sj.add(str);
        }
        System.out.println("method 4: " + sj.toString());
    }

}

返回值

method 1: a, b, c, d
method 2: a, b, c, d
method 3.1: abcd
method 3.2: a, b, c, d
method 3.3: {a, b, c, d}
method 4: (a, b, c, d)

StringJoiner 源码

StringJoiner add(CharSequence newElement)

将给定的副本CharSequence值作为下一个元素StringJoiner值。 如果newElement为null ,则"null"加入。

public StringJoiner add(CharSequence newElement) {
    prepareBuilder().append(newElement);
    return this;
}
    
private StringBuilder prepareBuilder() {
    if (value != null) {
        value.append(delimiter);
    } else {
        value = new StringBuilder().append(prefix);
    }
    return value;
}

private StringBuilder value;

重写了toString方法

@Override
public String toString() {
    if (value == null) {
        return emptyValue;
    } else {
        if (suffix.equals("")) {
            return value.toString();
        } else {
            int initialLength = value.length();
            String result = value.append(suffix).toString();
            // reset value to pre-append initialLength
            value.setLength(initialLength);
            return result;
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。