Skip to content

Commit 6532cf9

Browse files
authored
Bael 8351 (#17280)
* BAEL-7765: How to fix JsonParseException: Unexpected character (code 115) when parsing unquoted JSON in Jackson * BAEL-8243: the @ApplicationModuleListener annotation already includes the functionality of @async * BAEL-8351 How to Calculate Average of an 2d Array in Java * BAEL-8351: How to Calculate Average of an 2d Array in Java
1 parent e7c2498 commit 6532cf9

File tree

2 files changed

+162
-0
lines changed

2 files changed

+162
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.baeldung.array;
2+
3+
import java.util.Arrays;
4+
import java.util.OptionalDouble;
5+
6+
public class AverageIn2DArray {
7+
public static double findAverageWithoutUsingStream(int[][] array) {
8+
int sum = 0;
9+
int count = 0;
10+
for (int[] row : array) {
11+
for (int value : row) {
12+
sum += value;
13+
count++;
14+
}
15+
}
16+
return (double) sum / count;
17+
}
18+
19+
public static OptionalDouble findAverageUsingStream(int[][] array) {
20+
return Arrays.stream(array)
21+
.flatMapToInt(Arrays::stream)
22+
.average();
23+
}
24+
}
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
package com.baeldung.array;
2+
3+
import org.junit.Assert;
4+
import org.junit.Test;
5+
6+
import java.util.OptionalDouble;
7+
8+
public class AverageIn2DArrayUnitTest {
9+
10+
private static final int[][] singleElementArray = {{5}};
11+
private static final int[][] positiveNumbersArray = {
12+
{1, 2, 3},
13+
{4, 5, 6},
14+
{7, 8, 9}
15+
};
16+
private static final int[][] mixedNumbersArray = {
17+
{-3, 4, -2},
18+
{1, -5, 6},
19+
{2, 0, -1}
20+
};
21+
private static final int[][] zerosArray = {
22+
{0, 0, 0},
23+
{0, 0, 0},
24+
{0, 0, 0}
25+
};
26+
private static final int[][] emptyArray = {};
27+
private static final int[][] emptyRowsArray = {{}};
28+
private static final int[][] irregularArray = {
29+
{1, 2, 3},
30+
{4, 5},
31+
{6}
32+
};
33+
34+
35+
// Without Stream
36+
@Test
37+
public void givenSingleElementArray_whenNotUsingStream_thenFindAverage() {
38+
double expectedAverage = 5.0;
39+
double actualAverage = AverageIn2DArray.findAverageWithoutUsingStream(singleElementArray);
40+
Assert.assertEquals(expectedAverage, actualAverage, 0.0001);
41+
}
42+
43+
@Test
44+
public void givenPositiveNumbersArray_whenNotUsingStream_thenFindAverage() {
45+
double expectedAverage = 5.0;
46+
double actualAverage = AverageIn2DArray.findAverageWithoutUsingStream(positiveNumbersArray);
47+
Assert.assertEquals(expectedAverage, actualAverage, 0.0001);
48+
}
49+
50+
@Test
51+
public void givenMixedNumbersArray_whenNotUsingStream_thenFindAverage() {
52+
double expectedAverage = 0.222;
53+
double actualAverage = AverageIn2DArray.findAverageWithoutUsingStream(mixedNumbersArray);
54+
Assert.assertEquals(expectedAverage, actualAverage, 0.001);
55+
}
56+
57+
@Test
58+
public void givenZerosArray_whenNotUsingStream_thenFindAverage() {
59+
double expectedAverage = 0.0;
60+
double actualAverage = AverageIn2DArray.findAverageWithoutUsingStream(zerosArray);
61+
Assert.assertEquals(expectedAverage, actualAverage, 0.0001);
62+
}
63+
64+
@Test
65+
public void givenEmptyArray_whenNotUsingStream_thenFindAverage() {
66+
double expectedAverage = Double.NaN;
67+
double actualAverage = AverageIn2DArray.findAverageWithoutUsingStream(emptyArray);
68+
Assert.assertEquals(expectedAverage, actualAverage, 0.0001);
69+
}
70+
71+
@Test
72+
public void givenEmptyRowsArray_whenNotUsingStream_thenFindAverage() {
73+
double expectedAverage = Double.NaN;
74+
double actualAverage = AverageIn2DArray.findAverageWithoutUsingStream(emptyRowsArray);
75+
Assert.assertEquals(expectedAverage, actualAverage, 0.0001);
76+
}
77+
78+
@Test
79+
public void givenIrregularArray_whenNotUsingStream_thenFindAverage() {
80+
double expectedAverage = 3.5;
81+
double actualAverage = AverageIn2DArray.findAverageWithoutUsingStream(irregularArray);
82+
Assert.assertEquals(expectedAverage, actualAverage, 0.0001);
83+
}
84+
85+
// Using Stream
86+
87+
@Test
88+
public void givenSingleElementArray_whenUsingStream_thenFindAverage() {
89+
double expectedAverage = 5.0;
90+
OptionalDouble actualAverage = AverageIn2DArray.findAverageUsingStream(singleElementArray);
91+
Assert.assertTrue("Expected average should be present", actualAverage.isPresent());
92+
Assert.assertEquals(expectedAverage, actualAverage.getAsDouble(), 0.0001);
93+
}
94+
95+
@Test
96+
public void givenPositiveNumbersArray_whenUsingStream_thenFindAverage() {
97+
double expectedAverage = 5.0;
98+
OptionalDouble actualAverage = AverageIn2DArray.findAverageUsingStream(positiveNumbersArray);
99+
Assert.assertTrue("Expected average should be present", actualAverage.isPresent());
100+
Assert.assertEquals(expectedAverage, actualAverage.getAsDouble(), 0.0001);
101+
}
102+
103+
@Test
104+
public void givenMixedNumbersArray_whenUsingStream_thenFindAverage() {
105+
double expectedAverage = 0.222;
106+
OptionalDouble actualAverage = AverageIn2DArray.findAverageUsingStream(mixedNumbersArray);
107+
Assert.assertTrue("Expected average should be present", actualAverage.isPresent());
108+
Assert.assertEquals(expectedAverage, actualAverage.getAsDouble(), 0.001);
109+
}
110+
111+
@Test
112+
public void givenZerosArray_whenUsingStream_thenFindAverage() {
113+
double expectedAverage = 0.0;
114+
OptionalDouble actualAverage = AverageIn2DArray.findAverageUsingStream(zerosArray);
115+
Assert.assertTrue("Expected average should be present", actualAverage.isPresent());
116+
Assert.assertEquals(expectedAverage, actualAverage.getAsDouble(), 0.0001);
117+
}
118+
119+
@Test
120+
public void givenEmptyArray_whenUsingStream_thenFindAverage() {
121+
OptionalDouble actualAverage = AverageIn2DArray.findAverageUsingStream(emptyArray);
122+
Assert.assertFalse("Expected no average to be present", actualAverage.isPresent());
123+
}
124+
125+
@Test
126+
public void givenEmptyRowsArray_whenUsingStream_thenFindAverage() {
127+
OptionalDouble actualAverage = AverageIn2DArray.findAverageUsingStream(emptyRowsArray);
128+
Assert.assertFalse("Expected no average to be present", actualAverage.isPresent());
129+
}
130+
131+
@Test
132+
public void givenIrregularArray_whenUsingStream_thenFindAverage() {
133+
double expectedAverage = 3.5;
134+
OptionalDouble actualAverage = AverageIn2DArray.findAverageUsingStream(irregularArray);
135+
Assert.assertTrue("Expected average should be present", actualAverage.isPresent());
136+
Assert.assertEquals(expectedAverage, actualAverage.getAsDouble(), 0.0001);
137+
}
138+
}

0 commit comments

Comments
 (0)