static L filter(Iterable c, O pred) { new L x; if (c != null) for (O o : c) if (isTrue(callF(pred, o))) x.add(o); ret x; } static L filter(O pred, Iterable c) { ret filter(c, pred); } static <A, B extends A> L filter(Iterable<B> c, F1<A, Bool> pred) { new L x; if (c != null) for (B o : c) if (pred.get(o).booleanValue()) x.add(o); ret x; } static <A, B extends A> L filter(F1<A, Bool> pred, Iterable<B> c) { ret filter(c, pred); }