package com.insightfullogic.java8.examples.chapter5; import java.util.Collections; import java.util.Set; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collector; // BEGIN class_def public class StringCollector implements Collector<String, StringCombiner, String> { // END class_def private static final Set<Characteristics> characteristics = Collections.emptySet(); private final String delim; private final String prefix; private final String suffix; public StringCollector(String delim, String prefix, String suffix) { this.delim = delim; this.prefix = prefix; this.suffix = suffix; } @Override // BEGIN supplier public Supplier<StringCombiner> supplier() { return () -> new StringCombiner(delim, prefix, suffix); } // END supplier @Override // BEGIN accumulator public BiConsumer<StringCombiner, String> accumulator() { return StringCombiner::add; } // END accumulator @Override // BEGIN combiner public BinaryOperator<StringCombiner> combiner() { return StringCombiner::merge; } // END combiner @Override // BEGIN finisher public Function<StringCombiner, String> finisher() { return StringCombiner::toString; } // END finisher @Override public Set<Characteristics> characteristics() { return characteristics; } }