code: public static <T> ObjIterator<T> skipNull(final Iterator<T> iter) {
          if (iter == null) {
              return ObjIterator.empty();
          }
  
          return new ObjIterator<T>() {
              private final Iterator<T> iterator = iter;
              private T next;
  
              @Override
              public boolean hasNext() {
                  if (next == null && iterator.hasNext()) {
                      next = iterator.next();
  
                      if (next == null) {
                          while (iterator.hasNext()) {
                              next = iterator.next();
  
                              if (next != null) {
                                  break;
                              }
                          }
                      }
                  }
  
                  return next != null;
              }
  
              @Override
              public T next() {
                  if (next == null && hasNext() == false) {
                      throw new NoSuchElementException();
                  }
  
                  final T result = next;
                  next = null;
                  return result;
              }
          };
      }
docs: Returns a new {@code ObjIterator} with {@code null} elements removed.
  
  @param iter
  @return