class Merge { public static Collector<Content, ?, Content> collector() { return Collector.of(Merge::new, Merge::accept, Merge::combiner, Merge::finisher); } private StringJoiner a = new StringJoiner(", "); private StringJoiner b = new StringJoiner(", "); private StringJoiner c = new StringJoiner(", "); private void accept(Content content) { a.add(content.getA()); b.add(content.getB()); c.add(content.getC()); } private Merge combiner(Merge second) { a.merge(second.a); b.merge(second.b); c.merge(second.c); return this; } private Content finisher() { return new Content(a.toString(), b.toString(), c.toString()); } }