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; }