Skip to content

Commit eb5cd04

Browse files
committed
improvement of the article "How to Return Multiple Values From a Java Method"
1 parent 9c1fa6f commit eb5cd04

5 files changed

Lines changed: 117 additions & 0 deletions

File tree

core-java-modules/core-java-lang-2/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
</parent>
1616

1717
<dependencies>
18+
<dependency>
19+
<groupId>org.apache.commons</groupId>
20+
<artifactId>commons-lang3</artifactId>
21+
<version>3.9</version>
22+
</dependency>
1823
<dependency>
1924
<groupId>commons-beanutils</groupId>
2025
<artifactId>commons-beanutils</artifactId>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.baeldung.methodmultiplereturnvalues;
2+
3+
import org.apache.commons.lang3.tuple.ImmutablePair;
4+
import org.apache.commons.lang3.tuple.Pair;
5+
6+
import java.util.Comparator;
7+
import java.util.List;
8+
9+
class MultipleReturnValuesUsingApacheCommonsPair {
10+
11+
static ImmutablePair<Coordinates, Double> getMostDistantPoint(
12+
List<Coordinates> coordinatesList,
13+
Coordinates target) {
14+
return coordinatesList.stream()
15+
.map(coordinates -> ImmutablePair.of(coordinates, coordinates.calculateDistance(target)))
16+
.max(Comparator.comparingDouble(Pair::getRight))
17+
.get();
18+
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.baeldung.methodmultiplereturnvalues;
2+
3+
import org.apache.commons.lang3.tuple.ImmutableTriple;
4+
5+
import java.util.List;
6+
import java.util.stream.Collectors;
7+
8+
class MultipleReturnValuesUsingApacheCommonsTriple {
9+
10+
static ImmutableTriple<Double, Double, Double> getMinAvgMaxTriple(
11+
List<Coordinates> coordinatesList,
12+
Coordinates target) {
13+
14+
List<Double> distanceList = coordinatesList.stream()
15+
.map(coordinates -> coordinates.calculateDistance(target))
16+
.collect(Collectors.toList());
17+
Double minDistance = distanceList.stream().mapToDouble(Double::doubleValue).min().getAsDouble();
18+
Double avgDistance = distanceList.stream().mapToDouble(Double::doubleValue).average().orElse(0.0D);
19+
Double maxDistance = distanceList.stream().mapToDouble(Double::doubleValue).max().getAsDouble();
20+
21+
return ImmutableTriple.of(minDistance, avgDistance, maxDistance);
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.baeldung.methodmultiplereturnvalues;
2+
3+
import org.apache.commons.lang3.tuple.ImmutablePair;
4+
import org.junit.jupiter.api.Test;
5+
6+
import java.math.BigDecimal;
7+
import java.math.RoundingMode;
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
11+
import static org.junit.jupiter.api.Assertions.assertEquals;
12+
13+
class MultipleReturnValuesUsingApacheCommonsPairUnitTest {
14+
15+
@Test
16+
void whenUsingPair_thenMultipleFieldsAreReturned() {
17+
18+
List<Coordinates> coordinatesList = new ArrayList<>();
19+
coordinatesList.add(new Coordinates(1, 1, "home"));
20+
coordinatesList.add(new Coordinates(2, 2, "school"));
21+
coordinatesList.add(new Coordinates(3, 3, "hotel"));
22+
23+
Coordinates target = new Coordinates(5, 5, "gym");
24+
25+
ImmutablePair<Coordinates, Double> mostDistantPoint = MultipleReturnValuesUsingApacheCommonsPair.getMostDistantPoint(coordinatesList, target);
26+
27+
assertEquals(1, mostDistantPoint.getLeft().getLongitude());
28+
assertEquals(1, mostDistantPoint.getLeft().getLatitude());
29+
assertEquals("home", mostDistantPoint.getLeft().getPlaceName());
30+
assertEquals(5.66, BigDecimal.valueOf(mostDistantPoint.getRight()).setScale(2, RoundingMode.HALF_UP).doubleValue());
31+
32+
}
33+
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.baeldung.methodmultiplereturnvalues;
2+
3+
import org.apache.commons.lang3.tuple.ImmutableTriple;
4+
import org.junit.jupiter.api.Test;
5+
6+
import java.math.BigDecimal;
7+
import java.math.RoundingMode;
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
11+
import static org.junit.jupiter.api.Assertions.assertEquals;
12+
13+
class MultipleReturnValuesUsingApacheCommonsTripleUnitTest {
14+
15+
@Test
16+
void whenUsingTriple_thenMultipleFieldsAreReturned() {
17+
18+
List<Coordinates> coordinatesList = new ArrayList<>();
19+
coordinatesList.add(new Coordinates(1, 1, "home"));
20+
coordinatesList.add(new Coordinates(2, 2, "school"));
21+
coordinatesList.add(new Coordinates(3, 3, "hotel"));
22+
23+
Coordinates target = new Coordinates(5, 5, "gym");
24+
25+
ImmutableTriple<Double, Double, Double> minAvgMax = MultipleReturnValuesUsingApacheCommonsTriple.getMinAvgMaxTriple(coordinatesList, target);
26+
27+
assertEquals(2.83, scaleDouble(minAvgMax.left)); //min
28+
assertEquals(4.24, scaleDouble(minAvgMax.middle)); //avg
29+
assertEquals(5.66, scaleDouble(minAvgMax.right)); //max
30+
}
31+
32+
private double scaleDouble(Double d) {
33+
return BigDecimal.valueOf(d).setScale(2, RoundingMode.HALF_UP).doubleValue();
34+
}
35+
}

0 commit comments

Comments
 (0)