public final @NotNull JBIterable<E> join(@Nullable E separator) {
    return intercept(original -> {
      return new JBIterator<E>() {
        boolean flag;

        @Override
        protected E nextImpl() {
          if (!original.hasNext()) return stop();
          flag = !flag;
          return flag ? original.next() : separator;
        }
      };
    });
  }
public final @NotNull JBIterable<E> join(@Nullable E separator)