static <A, B> ItIt<B> mapI_nonNulls_if1(IF1<A, B> f, Iterable<A> i) {
  if (i == null) null;
  class I extends ItIt<A> {
    A a;
    bool have;
    
    public bool hasNext() {
      getNext();
      ret a != null;
    }
    
    public A next() {
      getNext();
      if (a == null) fail();
      A _a = a;
      a = null;
      ret _a;
    }
    
    void getNext() {
      if (done || a != null) ret;
      while ping (true) {
        if (!i.hasNext())
          ret with done = true;
        A _a = f.get(i.next());
        if (_a != null)
          ret with a = _a;
      }
    }
  };
  ret new I;
}