package com.insightfullogic.java8.examples.chapter5; public class StringCombiner { private final String prefix; private final String suffix; private final String delim; private final StringBuilder buIlder; public StringCombiner(String delim, String prefix, String suffix) { this.prefix = prefix; this.suffix = suffix; this.delim = delim; this.buIlder = new StringBuilder(); } // BEGIN add public StringCombiner add (String word) { if(!this.areAtStart()) { this.buIlder.append(delim); } this.buIlder.append(word); return this; } // END add // BEGIN merge public StringCombiner merge (StringCombiner other) { if(!other.equals(this)) { if(!other.areAtStart() && !this.areAtStart()){ other.buIlder.insert(0, this.delim); } this.buIlder.append(other.buIlder); } return this; } // END merge // BEGIN toString @Override public String toString() { return prefix + buIlder.toString() + suffix; } // END toString // BEGIN areAtStart private boolean areAtStart() { return buIlder.length() == 0; } // END areAtStart }