code: public Joining wrap(CharSequence prefix, CharSequence suffix) {
          return new Joining(delimiter, ellipsis, prefix.toString().concat(this.prefix), this.suffix.concat(suffix
                  .toString()), cutStrategy, lenStrategy, maxLength);
      }
docs: Returns a {@code Collector} which behaves like this collector, but
  additionally wraps the result with the specified prefix and suffix.
  
  <p>
  The collector returned by
  {@code Joining.with(delimiter).wrap(prefix, suffix)} is equivalent to
  {@link Collectors#joining(CharSequence, CharSequence, CharSequence)}, but
  can be further set up in a flexible way, for example, specifying the
  maximal allowed length of the resulting {@code String}.
  
  <p>
  If length limit is specified for the collector, the prefix length and the
  suffix length are also counted towards this limit. If the length of the
  prefix and the suffix exceed the limit, the resulting collector will not
  accumulate any elements and produce the same output. For example,
  {@code stream.collect(Joining.with(",").wrap("prefix", "suffix").maxChars(9))}
  will produce {@code "prefixsuf"} string regardless of the input stream
  content.
  
  <p>
  You may wrap several times:
  {@code Joining.with(",").wrap("[", "]").wrap("(", ")")} is equivalent to
  {@code Joining.with(",").wrap("([", "])")}.
  
  @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 new {@code Collector} which wraps the result with the specified
  prefix and suffix.