|
@@ -2,17 +2,19 @@ package net.ranides.assira.collection.query.base;
|
|
|
|
|
|
|
|
import net.ranides.assira.collection.query.CQuery;
|
|
import net.ranides.assira.collection.query.CQuery;
|
|
|
import net.ranides.assira.collection.query.CQueryAbstract;
|
|
import net.ranides.assira.collection.query.CQueryAbstract;
|
|
|
-import net.ranides.assira.collection.query.support.BaseSpliterator;
|
|
|
|
|
import net.ranides.assira.collection.query.support.BaseStream;
|
|
import net.ranides.assira.collection.query.support.BaseStream;
|
|
|
import net.ranides.assira.functional.Consumers;
|
|
import net.ranides.assira.functional.Consumers;
|
|
|
import net.ranides.assira.functional.Predicates;
|
|
import net.ranides.assira.functional.Predicates;
|
|
|
|
|
+import net.ranides.assira.math.MutableNumber.MutableInt;
|
|
|
|
|
|
|
|
import java.util.Iterator;
|
|
import java.util.Iterator;
|
|
|
import java.util.Spliterator;
|
|
import java.util.Spliterator;
|
|
|
|
|
+import java.util.Spliterators;
|
|
|
import java.util.function.Consumer;
|
|
import java.util.function.Consumer;
|
|
|
import java.util.function.Predicate;
|
|
import java.util.function.Predicate;
|
|
|
import java.util.function.Supplier;
|
|
import java.util.function.Supplier;
|
|
|
import java.util.stream.Stream;
|
|
import java.util.stream.Stream;
|
|
|
|
|
+import java.util.stream.StreamSupport;
|
|
|
|
|
|
|
|
public abstract class CQSpliterator<T> extends CQueryAbstract<T> {
|
|
public abstract class CQSpliterator<T> extends CQueryAbstract<T> {
|
|
|
|
|
|
|
@@ -63,22 +65,25 @@ public abstract class CQSpliterator<T> extends CQueryAbstract<T> {
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public Iterator<T> iterator() {
|
|
public Iterator<T> iterator() {
|
|
|
- return BaseSpliterator.iterator(this);
|
|
|
|
|
|
|
+ return Spliterators.iterator(spliterator());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public Stream<T> stream() {
|
|
public Stream<T> stream() {
|
|
|
- return BaseSpliterator.stream(this);
|
|
|
|
|
|
|
+ return StreamSupport.stream(spliterator(), false);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void forEach(Consumer<? super T> consumer) {
|
|
public void forEach(Consumer<? super T> consumer) {
|
|
|
- BaseSpliterator.forEach(this, consumer);
|
|
|
|
|
|
|
+ spliterator().forEachRemaining(consumer);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void forEach(Consumers.EachConsumer<? super T> consumer) {
|
|
public void forEach(Consumers.EachConsumer<? super T> consumer) {
|
|
|
- BaseSpliterator.forEach(this, consumer);
|
|
|
|
|
|
|
+ MutableInt index = new MutableInt(0);
|
|
|
|
|
+ spliterator().forEachRemaining(v -> {
|
|
|
|
|
+ consumer.accept(index.getAndIncrement(), v);
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -93,7 +98,15 @@ public abstract class CQSpliterator<T> extends CQueryAbstract<T> {
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public int size() {
|
|
public int size() {
|
|
|
- return BaseSpliterator.size(this);
|
|
|
|
|
|
|
+ Spliterator<T> spr = spliterator();
|
|
|
|
|
+
|
|
|
|
|
+ if(spr.hasCharacteristics(Spliterator.SIZED)) {
|
|
|
|
|
+ return (int)spr.estimateSize();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ MutableInt size = new MutableInt(0);
|
|
|
|
|
+ spliterator().forEachRemaining(v -> size.increment());
|
|
|
|
|
+ return size.intValue();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|