@Override public $.Option<T> findOne(final $.Function<? super T, Boolean> predicate) { try { forEach(new $.Visitor<T>() { @Override public void visit(T t) throws $.Break { if (predicate.apply(t)) { throw new $.Break(t); } } }); return $.none(); } catch ($.Break b) { T t = b.get(); return $.some(t); } }
@Override public $.Option<T> findOne(final $.Function<? super T, Boolean> predicate) { try { forEach(new $.Visitor<T>() { @Override public void visit(T t) throws $.Break { if (predicate.apply(t)) { throw new $.Break(t); } } }); return $.none(); } catch ($.Break b) { T t = b.get(); return $.some(t); } }
@Override public C.List<T> filter($.Function<? super T, Boolean> predicate) { boolean immutable = isImmutable(); int sz = size(); // TODO: handle lazy filter if (immutable) { if (0 == sz) { return Nil.list(); } ListBuilder<T> lb = new ListBuilder<T>(sz); forEach($.visitor($.predicate(predicate).ifThen(C.F.addTo(lb)))); return lb.toList(); } else { if (0 == sz) { return C.newList(); } C.List<T> l = C.newSizedList(sz); forEach($.visitor($.predicate(predicate).ifThen(C.F.addTo(l)))); return l; } }
@Override public C.List<T> remove($.Function<? super T, Boolean> predicate) { boolean immutable = isImmutable(); int sz = size(); // TODO: handle lazy remove if (immutable) { if (0 == sz) { return Nil.list(); } ListBuilder<T> lb = new ListBuilder<T>(sz); forEach($.visitor($.predicate(predicate).elseThen(C.F.addTo(lb)))); return lb.toList(); } else { if (0 == sz) { return C.newList(); } C.List<T> l = C.newSizedList(sz); forEach($.visitor($.predicate(predicate).elseThen(C.F.addTo(l)))); return l; } }
@Override public C.List<T> remove($.Function<? super T, Boolean> predicate) { boolean immutable = isImmutable(); int sz = size(); // TODO: handle lazy remove if (immutable) { if (0 == sz) { return Nil.list(); } ListBuilder<T> lb = new ListBuilder<T>(sz); forEach($.visitor($.predicate(predicate).elseThen(C.F.addTo(lb)))); return lb.toList(); } else { if (0 == sz) { return C.newList(); } C.List<T> l = C.newSizedList(sz); forEach($.visitor($.predicate(predicate).elseThen(C.F.addTo(l)))); return l; } }
@Override public <R> C.List<R> flatMap($.Function<? super T, ? extends Iterable<? extends R>> mapper ) { boolean immutable = isImmutable(); int sz = size(); // TODO: handle lazy flatmap if (immutable) { if (0 == sz) { return Nil.list(); } ListBuilder<R> lb = new ListBuilder<>(sz * 3); forEach($.visitor($.f1(mapper).andThen(C.F.addAllTo(lb)))); return lb.toList(); } else { if (0 == sz) { return C.newList(); } C.List<R> l = C.newSizedList(sz * 3); forEach($.visitor($.f1(mapper).andThen(C.F.addAllTo(l)))); return l; } }
@Override public C.List<T> filter($.Function<? super T, Boolean> predicate) { boolean immutable = isImmutable(); int sz = size(); // TODO: handle lazy filter if (immutable) { if (0 == sz) { return Nil.list(); } ListBuilder<T> lb = new ListBuilder<T>(sz); forEach($.visitor($.predicate(predicate).ifThen(C.F.addTo(lb)))); return lb.toList(); } else { if (0 == sz) { return C.newList(); } C.List<T> l = C.newSizedList(sz); forEach($.visitor($.predicate(predicate).ifThen(C.F.addTo(l)))); return l; } }
@Override public <R> C.List<R> flatMap($.Function<? super T, ? extends Iterable<? extends R>> mapper ) { boolean immutable = isImmutable(); int sz = size(); // TODO: handle lazy flatmap if (immutable) { if (0 == sz) { return Nil.list(); } ListBuilder<R> lb = new ListBuilder<>(sz * 3); forEach($.visitor($.f1(mapper).andThen(C.F.addAllTo(lb)))); return lb.toList(); } else { if (0 == sz) { return C.newList(); } C.List<R> l = C.newSizedList(sz * 3); forEach($.visitor($.f1(mapper).andThen(C.F.addAllTo(l)))); return l; } }
@Override public <R> C.List<R> map($.Function<? super T, ? extends R> mapper) { boolean immutable = isImmutable(); int sz = size(); if (isLazy()) { return MappedList.of(this, mapper); } if (immutable) { if (0 == sz) { return Nil.list(); } ListBuilder<R> lb = new ListBuilder<R>(sz); forEach($.visitor($.f1(mapper).andThen(C.F.addTo(lb)))); return lb.toList(); } else { if (0 == sz) { return C.newList(); } C.List<R> l = C.newSizedList(sz); forEach($.visitor($.f1(mapper).andThen(C.F.addTo(l)))); return l; } }
@Override public <R> C.List<R> map($.Function<? super T, ? extends R> mapper) { boolean immutable = isImmutable(); int sz = size(); if (isLazy()) { return MappedList.of(this, mapper); } if (immutable) { if (0 == sz) { return Nil.list(); } ListBuilder<R> lb = new ListBuilder<R>(sz); forEach($.visitor($.f1(mapper).andThen(C.F.addTo(lb)))); return lb.toList(); } else { if (0 == sz) { return C.newList(); } C.List<R> l = C.newSizedList(sz); forEach($.visitor($.f1(mapper).andThen(C.F.addTo(l)))); return l; } }