將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;
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章