import java.util.ArrayList;
import java.util.stream.Collectors;

public class StringBuilder extends Builder<String> {
	
	private ArrayList<Character> m_data;
	
	public StringBuilder() {
		m_data = new ArrayList<>();
	}

	public StringBuilder append(char i) {
		m_data.add(i);
		return this;
	}
	
	public StringBuilder append(String s) {
		m_data.ensureCapacity(m_data.size() + s.length());
		s.chars().forEach(x -> m_data.add((char)x));
		return this;
	}
	
	public StringBuilder append(int i) {
		return append(Integer.toString(i));
	}
	
	public StringBuilder append(double d) {
		return append(Double.toString(d));
	}
	
	public StringBuilder append(long l) {
		return append(Long.toString(l));
	}

	@Override
	protected String construct() {
		return m_data.stream().map(Object::toString).collect(Collectors.joining());
	}
	

}
