Bläddra i källkod

new: CQuery#apply
fix: MathStats

Mariusz Czarnowski 4 år sedan
förälder
incheckning
b7cedba868

+ 2 - 0
assira.core/src/main/java/net/ranides/assira/collection/query/CQuery.java

@@ -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();

+ 5 - 0
assira.core/src/main/java/net/ranides/assira/collection/query/CQueryAbstract.java

@@ -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;

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/math/MathStats.java

@@ -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()
                     .mapToDouble(Number::doubleValue)
-                    .map(x -> MathUtils.square(avg2 - x * x))
+                    .map(x -> MathUtils.square(avg - x))
                     .summaryStatistics();
 
             this.average = statAvg.getAverage();

+ 7 - 0
assira.core/src/test/java/net/ranides/assira/math/MathStatsTest.java

@@ -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);
+    }
 }