Skip to content

Commit af212a9

Browse files
Treiblesschorlectrueden
authored andcommitted
Add array lift for functions and test
1 parent f39460b commit af212a9

2 files changed

Lines changed: 12 additions & 1 deletion

File tree

src/main/java/org/scijava/ops/util/Maps.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.scijava.ops.util;
22

3+
import java.lang.reflect.Array;
34
import java.util.Iterator;
45
import java.util.List;
56
import java.util.function.Function;
@@ -28,6 +29,13 @@ public static <I, O> Function<Iterable<I>, Iterable<O>> bothFlat(final Function<
2829
}
2930
}
3031

32+
public interface Arrays {
33+
@SuppressWarnings("unchecked")
34+
public static <I, O> Function<I[], O[]> liftBoth(final Function<I, O> function, Class<O> cls) {
35+
return is -> java.util.Arrays.stream(is).map(function).toArray(size -> (O[])Array.newInstance(cls, size));
36+
}
37+
}
38+
3139
public interface Lists {
3240
public static <I, O> Function<List<I>, List<O>> liftBoth(final Function<I, O> function) {
3341
return iter -> iter.stream().map(function).collect(Collectors.toList());

src/test/java/org/scijava/ops/LiftTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,11 @@ public void testliftFunction() throws ValidityException {
5959

6060
Function<Iterable<Double>, Iterable<Double>> liftedToIterable = Maps.Functions.Iterables.liftBoth(powFunction);
6161
Iterable<Double> res2 = liftedToIterable.apply(Arrays.asList(1.0, 2.0, 3.0, 4.0));
62-
6362
arrayEquals(toArray(res2), 1.0, 4.0, 9.0, 16.0);
63+
64+
Function<Double[], Double[]> liftedToArray = Maps.Functions.Arrays.liftBoth(powFunction, Double.class);
65+
Double[] res3 = liftedToArray.apply(new Double[]{1.0, 2.0, 3.0, 4.0});
66+
arrayEquals(Arrays.stream(res3).mapToDouble(d -> d).toArray(), 1.0, 4.0, 9.0, 16.0);
6467
}
6568

6669
private static double[] toArray(Iterable<Double> iter) {

0 commit comments

Comments
 (0)