|
@@ -145,7 +145,12 @@ public abstract class CQueryAbstract<T> implements CQuery<T> {
|
|
|
public final <R> CQuery<R> map(Function<? super T, ? extends R> f) {
|
|
public final <R> CQuery<R> map(Function<? super T, ? extends R> f) {
|
|
|
return new CQIterable<>(() -> IteratorUtils.map(iterator(), f));
|
|
return new CQIterable<>(() -> IteratorUtils.map(iterator(), f));
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public <R> CQuery<R> mapOptional(Function<? super T, Optional<? extends R>> f) {
|
|
|
|
|
+ return map(f).filter(Optional::isPresent).map(Optional::get);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public final <R> CQuery<R> mapEach(EachFunction<? super T, ? extends R> f) {
|
|
public final <R> CQuery<R> mapEach(EachFunction<? super T, ? extends R> f) {
|
|
|
return new CQIterable<>(() -> IteratorUtils.map(iterator(), f));
|
|
return new CQIterable<>(() -> IteratorUtils.map(iterator(), f));
|
|
@@ -161,6 +166,13 @@ public abstract class CQueryAbstract<T> implements CQuery<T> {
|
|
|
return mapEach((i, v) -> !p.test(i, v) ? v : f.apply(i,v));
|
|
return mapEach((i, v) -> !p.test(i, v) ? v : f.apply(i,v));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public CQuery<T> mapOptionalIf(Predicate<? super T> p, Function<? super T, Optional<? extends T>> f) {
|
|
|
|
|
+ return map(v -> !p.test(v) ? Optional.of(v) : f.apply(v))
|
|
|
|
|
+ .filter(Optional::isPresent)
|
|
|
|
|
+ .map(Optional::get);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public final <R> CQuery<R> unfold(Function<? super T, CQuery<R>> f) {
|
|
public final <R> CQuery<R> unfold(Function<? super T, CQuery<R>> f) {
|
|
|
return new CQIterable<>(() -> IteratorUtils.flat(IteratorUtils.map(iterator(), (v) -> f.apply(v).iterator())));
|
|
return new CQIterable<>(() -> IteratorUtils.flat(IteratorUtils.map(iterator(), (v) -> f.apply(v).iterator())));
|