code: public static Collector<CharSequence, ?, String> joining(CharSequence delimiter,
                                                               CharSequence prefix,
                                                               CharSequence suffix) {
          return new CollectorImpl<>(
                  () -> new StringJoiner(delimiter, prefix, suffix),
                  StringJoiner::add, StringJoiner::merge,
                  StringJoiner::toString, CH_NOID);
      }
docs: Returns a {@code Collector} that concatenates the input elements,
  separated by the specified delimiter, with the specified prefix and
  suffix, in encounter order.
  
  @param delimiter the delimiter to be used between each element
  @param  prefix the sequence of characters to be used at the beginning
  of the joined result
  @param  suffix the sequence of characters to be used at the end
  of the joined result
  @return A {@code Collector} which concatenates CharSequence elements,
  separated by the specified delimiter, in encounter order