Skip to content

Commit e343a5b

Browse files
Boroshjavadev
authored andcommitted
Add U.average(iterable) and U.average(iterable, function) methods.
1 parent 6d3aa29 commit e343a5b

File tree

2 files changed

+163
-1
lines changed
  • src
    • main/java/com/github/underscore/lodash
    • test/java/com/github/underscore/lodash

2 files changed

+163
-1
lines changed

src/main/java/com/github/underscore/lodash/U.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.github.underscore.PredicateIndexed;
3333
import com.github.underscore.Tuple;
3434
import com.github.underscore.Optional;
35+
3536
import java.util.*;
3637

3738
public class U<T> extends com.github.underscore.U<T> {
@@ -944,6 +945,72 @@ public List<T> at(final Integer ... indexes) {
944945
return at((List<T>) getIterable(), indexes);
945946
}
946947

948+
public static <T extends Number> Double average(final Iterable<T> iterable) {
949+
T sum = sum(iterable);
950+
if (sum == null) {
951+
return null;
952+
}
953+
return sum.doubleValue() / size(iterable);
954+
}
955+
956+
public static <E, F extends Number> Double average(final Iterable<E> iterable, final Function<E, F> func) {
957+
F sum = sum(iterable, func);
958+
return sum.doubleValue() / size(iterable);
959+
}
960+
961+
public static <N extends Number> Double average(N[] array) {
962+
return sum(array).doubleValue() / array.length;
963+
}
964+
965+
public static Double average(java.math.BigDecimal first, java.math.BigDecimal second) {
966+
if (first == null || second == null) {
967+
return null;
968+
}
969+
return sum(first, second).doubleValue() / 2;
970+
}
971+
972+
public static Double average(java.math.BigInteger first, java.math.BigInteger second) {
973+
if (first == null || second == null) {
974+
return null;
975+
}
976+
return sum(first, second).doubleValue() / 2;
977+
}
978+
979+
public static Double average(Byte first, Byte second) {
980+
if (first == null || second == null) {
981+
return null;
982+
}
983+
return sum(first, second).doubleValue() / 2;
984+
}
985+
986+
public static Double average(Double first, Double second) {
987+
if (first == null || second == null) {
988+
return null;
989+
}
990+
return sum(first, second) / 2;
991+
}
992+
993+
public static Double average(Float first, Float second) {
994+
if (first == null || second == null) {
995+
return null;
996+
}
997+
return sum(first, second).doubleValue() / 2;
998+
}
999+
1000+
public static Double average(Integer first, Integer second) {
1001+
if (first == null || second == null) {
1002+
return null;
1003+
}
1004+
return sum(first, second).doubleValue() / 2;
1005+
}
1006+
1007+
public static Double average(Long first, Long second) {
1008+
if (first == null || second == null) {
1009+
return null;
1010+
}
1011+
return sum(first, second).doubleValue() / 2;
1012+
}
1013+
9471014
public static <T extends Number> T sum(final Iterable<T> iterable) {
9481015
T result = null;
9491016
for (final T item : iterable) {

src/test/java/com/github/underscore/lodash/MathTest.java

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,101 @@
4040
*/
4141
public class MathTest {
4242

43+
@Test
44+
public void average() {
45+
final Double result = U.average(asList((byte) 1, (byte) 2, (byte) 3));
46+
assertEquals("2.0", result.toString());
47+
final Double resultFunc = U.average(asList((byte) 1, (byte) 2, (byte) 3), new Function<Byte, Byte>() {
48+
public Byte apply(final Byte item) {
49+
return (byte) (item * 2);
50+
}
51+
});
52+
assertEquals("4.0", resultFunc.toString());
53+
assertEquals("2.0", result.toString());
54+
final Double result2 = U.average(asList((double) 1, (double) 2, (double) 3));
55+
assertEquals("2.0", result2.toString());
56+
final Double result3 = U.average(asList((float) 1, (float) 2, (float) 3));
57+
assertEquals("2.0", result3.toString());
58+
final Double result4 = U.average(asList((int) 1, (int) 2, (int) 3));
59+
assertEquals("2.0", result4.toString());
60+
final Double result5 = U.average(asList((long) 1, (long) 2, (long) 3));
61+
assertEquals("2.0", result5.toString());
62+
final Double result6 = U.average(asList((short) 1, (short) 2, (short) 3));
63+
assertEquals("2.0", result6.toString());
64+
final Double result7 = U.average(asList(BigDecimal.valueOf(1), BigDecimal.valueOf(2), BigDecimal.valueOf(3)));
65+
assertEquals("2.0", result7.toString());
66+
final Double result8 = U.average(asList(BigInteger.valueOf(1), BigInteger.valueOf(2), BigInteger.valueOf(3)));
67+
assertEquals("2.0", result8.toString());
68+
final Double result9 = U.average(asList((Integer) null));
69+
assertNull(result9);
70+
final Double result10 = U.average(asList(1, (Integer) null));
71+
assertEquals("0.5", result10.toString());
72+
final Double result11 = U.average(asList((double) 0.2, (double) 0.1, Math.PI));
73+
assertEquals(Double.valueOf((0.2 + 0.1 + Math.PI) / 3).toString(), result11.toString());
74+
final Double result12 = U.average(asList((double) 0, (double) 14, (double) 0.2));
75+
assertEquals(Double.valueOf((0 + 14 + 0.2) / 3), result12);
76+
final Double result13 = U.average(asList((int) -1, (int) -2, (int) -3));
77+
assertEquals("-2.0", result13.toString());
78+
final Double result14 = U.average(new Integer[] {1, 2, 3});
79+
assertEquals("2.0", result14.toString());
80+
final Double result15 = U.average(new Double[] {1.0, 2.0, 3.0});
81+
assertEquals("2.0", result15.toString());
82+
final Double result16 = U.average(new Float[] {(float) 1.0, (float) 2.0, (float) 3.0});
83+
assertEquals("2.0", result16.toString());
84+
final Double result17 = U.average(new Short[] {1, 2, 3});
85+
assertEquals("2.0", result17.toString());
86+
final Double result18 = U.average(new Long[] {(long) 1, (long) 2, (long) 3});
87+
assertEquals("2.0", result18.toString());
88+
final Double result19 = U.average(new BigInteger[] {BigInteger.valueOf(1), BigInteger.valueOf(2),
89+
BigInteger.valueOf(3)});
90+
assertEquals("2.0", result19.toString());
91+
final Double result20 = U.average(new BigDecimal[] {BigDecimal.valueOf(1), BigDecimal.valueOf(2),
92+
BigDecimal.valueOf(3)});
93+
assertEquals("2.0", result20.toString());
94+
final Double result21 = U.average(null, BigDecimal.valueOf(1));
95+
assertNull(result21);
96+
final Double result22 = U.average(BigDecimal.valueOf(1), null);
97+
assertNull(result22);
98+
final Double result23 = U.average(BigDecimal.valueOf(2), BigDecimal.valueOf(4));
99+
assertEquals("3.0", result23.toString());
100+
final Double result24 = U.average(BigInteger.valueOf(1), null);
101+
assertNull(result24);
102+
final Double result25 = U.average(null, BigInteger.valueOf(1));
103+
assertNull(result25);
104+
final Double result26 = U.average(BigInteger.valueOf(2), BigInteger.valueOf(4));
105+
assertEquals("3.0", result26.toString());
106+
final Double result27 = U.average((byte) 1, null);
107+
assertNull(result27);
108+
final Double result28 = U.average(null, (byte) 1);
109+
assertNull(result28);
110+
final Double result29 = U.average((byte) 2, (byte) 4);
111+
assertEquals("3.0", result29.toString());
112+
final Double result30 = U.average(Double.valueOf(2), null);
113+
assertNull(result30);
114+
final Double result31 = U.average(null, Double.valueOf(2));
115+
assertNull(result31);
116+
final Double result32 = U.average(Double.valueOf(2), Double.valueOf(4));
117+
assertEquals("3.0", result32.toString());
118+
final Double result33 = U.average(Float.valueOf(2), null);
119+
assertNull(result33);
120+
final Double result34 = U.average(null, Float.valueOf(2));
121+
assertNull(result34);
122+
final Double result35 = U.average(Float.valueOf(2), Float.valueOf(4));
123+
assertEquals("3.0", result35.toString());
124+
final Double result36 = U.average(Integer.valueOf(2), null);
125+
assertNull(result36);
126+
final Double result37 = U.average(null, Integer.valueOf(2));
127+
assertNull(result37);
128+
final Double result38 = U.average(Integer.valueOf(2), Integer.valueOf(4));
129+
assertEquals("3.0", result38.toString());
130+
final Double result39 = U.average(Long.valueOf(2), null);
131+
assertNull(result39);
132+
final Double result40 = U.average(null, Long.valueOf(2));
133+
assertNull(result40);
134+
final Double result41 = U.average(Long.valueOf(2), Long.valueOf(4));
135+
assertEquals("3.0", result41.toString());
136+
}
137+
43138
/*
44139
_.sum([1, 2, 3]);
45140
=> 6
@@ -76,7 +171,7 @@ public Byte apply(final Byte item) {
76171
final BigInteger result8 = U.sum(asList(BigInteger.valueOf(1), BigInteger.valueOf(2), BigInteger.valueOf(3)));
77172
assertEquals("6", result8.toString());
78173
final Integer result9 = U.sum(asList((Integer) null));
79-
assertEquals(null, result9);
174+
assertNull(result9);
80175
final Integer result10 = U.sum(asList(1, (Integer) null));
81176
assertEquals("1", result10.toString());
82177
final Double result11 = U.sum(asList((double) 0.2, (double) 0.1, Math.PI));

0 commit comments

Comments
 (0)