@@ -155,6 +155,8 @@ public interface CQuery<T> extends Iterable<T> {
boolean matchNone(Predicate<? super T> predicate);
+ <R> R apply(Function<CQuery<? extends T>, R> function);
+
class Wrapper<F> {
protected static final Wrapper INSTANCE = new Wrapper();
@@ -313,6 +313,11 @@ public abstract class CQueryAbstract<T> implements CQuery<T> {
return stream().noneMatch(predicate);
}
+ @Override
+ public <R> R apply(Function<CQuery<? extends T>, R> function) {
+ return function.apply(this);
+ }
protected static class CQCollection<T> extends CQueryAbstract<T> {
private final Supplier<Collection<T>> source;
@@ -87,11 +87,11 @@ public class MathStats {
.mapToDouble(Number::doubleValue)
.summaryStatistics();
- double avg2 = MathUtils.square(statAvg.getAverage());
+ double avg = statAvg.getAverage();
DoubleSummaryStatistics statVar = data.stream()
- .map(x -> MathUtils.square(avg2 - x * x))
+ .map(x -> MathUtils.square(avg - x))
this.average = statAvg.getAverage();
@@ -13,4 +13,11 @@ public class MathStatsTest {
assertEquals((Integer) 2, MathStats.mode(v1).getValue());
assertEquals(4, MathStats.mode(v1).getCount());
+ @Test
+ public void deviation() {
+ CQuery<Integer> v1 = CQuery.from().values(1, 2, 3, 4, 5, 5, 6, 7, 8, 9);
+ assertEquals(5.0, MathStats.deviation(v1).getAverage(), 0.1);
+ assertEquals(2.4, MathStats.deviation(v1).getDeviation(), 0.1);