Skip to content

Commit 11aebbd

Browse files
committed
[jOOQ#390] Add Agg.correlationDouble()
1 parent f532475 commit 11aebbd

File tree

4 files changed

+102
-0
lines changed

4 files changed

+102
-0
lines changed

jOOL-java-8/src/main/java/org/jooq/lambda/Agg.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,25 @@ else if (l.size() == 1)
10961096
});
10971097
}
10981098

1099+
/**
1100+
* Get a {@link Collector} that calculates the <code>CORR()</code> function.
1101+
*/
1102+
public static Collector<Tuple2<Double, Double>, ?, Optional<Double>> correlationDouble() {
1103+
return correlationDouble(t -> t.v1, t -> t.v2);
1104+
}
1105+
1106+
/**
1107+
* Get a {@link Collector} that calculates the <code>CORR()</code> function.
1108+
*/
1109+
public static <T> Collector<T, ?, Optional<Double>> correlationDouble(ToDoubleFunction<? super T> functionX, ToDoubleFunction<? super T> functionY) {
1110+
return collectingAndThen(
1111+
collectors(covarianceDouble(functionX, functionY),
1112+
stddevDouble(functionX),
1113+
stddevDouble(functionY)),
1114+
t -> !t.v1.isPresent() || t.v2.orElse(0.0) == 0.0 || t.v3.orElse(0.0) == 0.0 ? Optional.empty() : Optional.of(t.v1.get() / (t.v2.get() * t.v3.get()))
1115+
);
1116+
}
1117+
10991118
private static <T> double avg0(List<T> list, ToDoubleFunction<? super T> function) {
11001119
double result = 0.0;
11011120

jOOL-java-8/src/test/java/org/jooq/lambda/CollectorTests.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1366,4 +1366,36 @@ public void testCovarianceWithObjects() {
13661366
assertEquals(Optional.of(0.25), Seq.of(tuple(1.0, 1.0), tuple(2.0, 2.0)).collect(Agg.covarianceDouble(Tuple2::v1, Tuple2::v2)));
13671367
assertEquals(Optional.of(0.5), Seq.of(tuple(1.0, 1.0), tuple(2.0, 3.0)).collect(Agg.covarianceDouble(Tuple2::v1, Tuple2::v2)));
13681368
}
1369+
1370+
@Test
1371+
public void testCorrelationWithNumbers() {
1372+
assertEquals(Optional.empty(), Seq.<Tuple2<Double, Double>>of().collect(Agg.correlationDouble()));
1373+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0)).collect(Agg.correlationDouble()));
1374+
assertEquals(Optional.empty(), Seq.of(tuple(2.0, 2.0)).collect(Agg.correlationDouble()));
1375+
1376+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0), tuple(1.0, 1.0)).collect(Agg.correlationDouble()));
1377+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0), tuple(1.0, 2.0)).collect(Agg.correlationDouble()));
1378+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 2.0), tuple(1.0, 2.0)).collect(Agg.correlationDouble()));
1379+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 2.0), tuple(1.0, 1.0)).collect(Agg.correlationDouble()));
1380+
1381+
assertEquals(Optional.of(1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 2.0)).collect(Agg.correlationDouble()));
1382+
assertEquals(Optional.of(1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 3.0)).collect(Agg.correlationDouble()));
1383+
assertEquals(Optional.of(-1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 0.0)).collect(Agg.correlationDouble()));
1384+
}
1385+
1386+
@Test
1387+
public void testCorrelationWithObjects() {
1388+
assertEquals(Optional.empty(), Seq.<Tuple2<Double, Double>>of().collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1389+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1390+
assertEquals(Optional.empty(), Seq.of(tuple(2.0, 2.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1391+
1392+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0), tuple(1.0, 1.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1393+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0), tuple(1.0, 2.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1394+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 2.0), tuple(1.0, 2.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1395+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 2.0), tuple(1.0, 1.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1396+
1397+
assertEquals(Optional.of(1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 2.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1398+
assertEquals(Optional.of(1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 3.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1399+
assertEquals(Optional.of(-1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 0.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1400+
}
13691401
}

jOOL/src/main/java/org/jooq/lambda/Agg.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,25 @@ else if (l.size() == 1)
10961096
});
10971097
}
10981098

1099+
/**
1100+
* Get a {@link Collector} that calculates the <code>CORR()</code> function.
1101+
*/
1102+
public static Collector<Tuple2<Double, Double>, ?, Optional<Double>> correlationDouble() {
1103+
return correlationDouble(t -> t.v1, t -> t.v2);
1104+
}
1105+
1106+
/**
1107+
* Get a {@link Collector} that calculates the <code>CORR()</code> function.
1108+
*/
1109+
public static <T> Collector<T, ?, Optional<Double>> correlationDouble(ToDoubleFunction<? super T> functionX, ToDoubleFunction<? super T> functionY) {
1110+
return collectingAndThen(
1111+
collectors(covarianceDouble(functionX, functionY),
1112+
stddevDouble(functionX),
1113+
stddevDouble(functionY)),
1114+
t -> !t.v1.isPresent() || t.v2.orElse(0.0) == 0.0 || t.v3.orElse(0.0) == 0.0 ? Optional.empty() : Optional.of(t.v1.get() / (t.v2.get() * t.v3.get()))
1115+
);
1116+
}
1117+
10991118
private static <T> double avg0(List<T> list, ToDoubleFunction<? super T> function) {
11001119
double result = 0.0;
11011120

jOOL/src/test/java/org/jooq/lambda/CollectorTests.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1366,4 +1366,36 @@ public void testCovarianceWithObjects() {
13661366
assertEquals(Optional.of(0.25), Seq.of(tuple(1.0, 1.0), tuple(2.0, 2.0)).collect(Agg.covarianceDouble(Tuple2::v1, Tuple2::v2)));
13671367
assertEquals(Optional.of(0.5), Seq.of(tuple(1.0, 1.0), tuple(2.0, 3.0)).collect(Agg.covarianceDouble(Tuple2::v1, Tuple2::v2)));
13681368
}
1369+
1370+
@Test
1371+
public void testCorrelationWithNumbers() {
1372+
assertEquals(Optional.empty(), Seq.<Tuple2<Double, Double>>of().collect(Agg.correlationDouble()));
1373+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0)).collect(Agg.correlationDouble()));
1374+
assertEquals(Optional.empty(), Seq.of(tuple(2.0, 2.0)).collect(Agg.correlationDouble()));
1375+
1376+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0), tuple(1.0, 1.0)).collect(Agg.correlationDouble()));
1377+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0), tuple(1.0, 2.0)).collect(Agg.correlationDouble()));
1378+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 2.0), tuple(1.0, 2.0)).collect(Agg.correlationDouble()));
1379+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 2.0), tuple(1.0, 1.0)).collect(Agg.correlationDouble()));
1380+
1381+
assertEquals(Optional.of(1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 2.0)).collect(Agg.correlationDouble()));
1382+
assertEquals(Optional.of(1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 3.0)).collect(Agg.correlationDouble()));
1383+
assertEquals(Optional.of(-1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 0.0)).collect(Agg.correlationDouble()));
1384+
}
1385+
1386+
@Test
1387+
public void testCorrelationWithObjects() {
1388+
assertEquals(Optional.empty(), Seq.<Tuple2<Double, Double>>of().collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1389+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1390+
assertEquals(Optional.empty(), Seq.of(tuple(2.0, 2.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1391+
1392+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0), tuple(1.0, 1.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1393+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 1.0), tuple(1.0, 2.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1394+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 2.0), tuple(1.0, 2.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1395+
assertEquals(Optional.empty(), Seq.of(tuple(1.0, 2.0), tuple(1.0, 1.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1396+
1397+
assertEquals(Optional.of(1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 2.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1398+
assertEquals(Optional.of(1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 3.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1399+
assertEquals(Optional.of(-1.0), Seq.of(tuple(1.0, 1.0), tuple(2.0, 0.0)).collect(Agg.correlationDouble(Tuple2::v1, Tuple2::v2)));
1400+
}
13691401
}

0 commit comments

Comments
 (0)