code: public static String join(Iterator iterator, String separator) {
  
          // handle null, zero and one elements before building a buffer
          if (iterator == null) {
              return null;
          }
          if (!iterator.hasNext()) {
              return EMPTY;
          }
          Object first = iterator.next();
          if (!iterator.hasNext()) {
              return toString(first);
          }
  
          // two or more elements
          StringBuilder buf = new StringBuilder(256); // Java default is 16, probably too small
          if (first != null) {
              buf.append(first);
          }
  
          while (iterator.hasNext()) {
              if (separator != null) {
                  buf.append(separator);
              }
              Object obj = iterator.next();
              if (obj != null) {
                  buf.append(obj);
              }
          }
          return buf.toString();
      }
docs: <p>Joins the elements of the provided <code>Iterator</code> into
  a single String containing the provided elements.</p>
  
  <p>No delimiter is added before or after the list.
  A <code>null</code> separator is the same as an empty String ("").</p>
  
  <p>See the examples here: {@link #join(Object[],String)}. </p>
  
  @param iterator  the <code>Iterator</code> of values to join together, may be null
  @param separator  the separator character to use, null treated as ""
  @return the joined String, <code>null</code> if null iterator input