diff --git a/core-java-modules/core-java-collections-conversions-3/pom.xml b/core-java-modules/core-java-collections-conversions-3/pom.xml
index d55a1aecdf..373e6ec318 100644
--- a/core-java-modules/core-java-collections-conversions-3/pom.xml
+++ b/core-java-modules/core-java-collections-conversions-3/pom.xml
@@ -13,6 +13,14 @@
0.0.1-SNAPSHOT
+
+
+ org.apache.commons
+ commons-lang3
+ ${apache.commons.version}
+
+
+
core-java-collections-conversions-3
@@ -23,4 +31,8 @@
+
+ 3.14.0
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-conversions-3/src/test/java/com/baeldung/listtoprimitivearray/ConvertingListToPrimitiveArrayUnitTest.java b/core-java-modules/core-java-collections-conversions-3/src/test/java/com/baeldung/listtoprimitivearray/ConvertingListToPrimitiveArrayUnitTest.java
new file mode 100644
index 0000000000..1cc6a31400
--- /dev/null
+++ b/core-java-modules/core-java-collections-conversions-3/src/test/java/com/baeldung/listtoprimitivearray/ConvertingListToPrimitiveArrayUnitTest.java
@@ -0,0 +1,104 @@
+package com.baeldung.listtoprimitivearray;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Stream;
+import org.apache.commons.lang3.ArrayUtils;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class ConvertingListToPrimitiveArrayUnitTest {
+
+ @ParameterizedTest
+ @MethodSource("floatListProvider")
+ void givenListOfWrapperFloat_whenConvertToWrapperArray_thenGetCorrectResult(List floats) {
+ Float[] actual = floats.toArray(new Float[0]);
+ assertSequences(floats, actual);
+ }
+
+ @ParameterizedTest
+ @MethodSource("floatListProvider")
+ void givenListOfWrapperFloat_whenConvertToWrapperArrayWithPreSizedArray_thenGetCorrectResult(List floats) {
+ Float[] actual = floats.toArray(new Float[floats.size()]);
+ assertSequences(floats, actual);
+ }
+
+ @ParameterizedTest
+ @MethodSource("floatListProvider")
+ void givenListOfWrapperFloat_whenConvertToPrimitiveArray_thenGetCorrectResult(List floats) {
+ float[] actual = new float[floats.size()];
+ for (int i = 0; i < floats.size(); i++) {
+ actual[i] = floats.get(i);
+ }
+ assertSequences(floats, actual);
+ }
+
+ @ParameterizedTest
+ @MethodSource("floatListProvider")
+ void givenListOfWrapperFloat_whenUnboxToPrimitiveArray_thenGetCorrectResult(List floats) {
+ float[] actual = new float[floats.size()];
+ Float[] floatArray = floats.toArray(new Float[0]);
+ for (int i = 0; i < floats.size(); i++) {
+ actual[i] = floatArray[i];
+ }
+ assertSequences(floats, actual);
+ }
+
+ @ParameterizedTest
+ @MethodSource("floatListProvider")
+ void givenListOfWrapperFloat_whenConvertToPrimitiveArrayWithArrayUtils_thenGetCorrectResult(List floats) {
+ float[] actual = ArrayUtils.toPrimitive(floats.toArray(new Float[]{}));
+ assertSequences(floats, actual);
+ }
+
+ @ParameterizedTest
+ @MethodSource("floatListProvider")
+ void givenListOfWrapperFloat_whenConvertingToPrimitiveArrayUsingStreams_thenGetCorrectResult(List floats) {
+ double[] actual = floats.stream().mapToDouble(Float::doubleValue).toArray();
+ assertSequences(floats, actual);
+ }
+
+ @ParameterizedTest
+ @MethodSource("floatListProvider")
+ void givenListOfWrapperFloat_whenConvertingWithCollector_thenGetCorrectResult(List floats) {
+ float[] actual = floats.stream().collect(new FloatCollector(floats.size()));
+ assertSequences(floats, actual);
+ }
+
+ private static void assertSequences(Iterable floats, Float[] actual) {
+ assertThat(actual).hasSameSizeAs(floats);
+ for (Float value : floats) {
+ assertThat(actual).contains(value);
+ }
+ }
+
+ private static void assertSequences(Iterable floats, float[] actual) {
+ assertThat(actual).hasSameSizeAs(floats);
+ for (Float value : floats) {
+ assertThat(actual).contains(value);
+ }
+ }
+
+ private static void assertSequences(Iterable floats, double[] actual) {
+ assertThat(actual).hasSameSizeAs(floats);
+ for (Float value : floats) {
+ assertThat(actual).contains(value);
+ }
+ }
+
+ static Stream> floatListProvider() {
+ ArrayList floats = new ArrayList<>();
+ floats.add(Float.valueOf(131.36f));
+ floats.add(Float.valueOf(66.59f));
+ floats.add(Float.valueOf(58.03f));
+ floats.add(Float.valueOf(951.56f));
+ floats.add(Float.valueOf(192.04f));
+ floats.add(Float.valueOf(899.03f));
+ floats.add(Float.valueOf(147.32f));
+ floats.add(Float.valueOf(573.75f));
+ floats.add(Float.valueOf(94.75f));
+ return Stream.of(floats);
+ }
+}
diff --git a/core-java-modules/core-java-collections-conversions-3/src/test/java/com/baeldung/listtoprimitivearray/FloatCollector.java b/core-java-modules/core-java-collections-conversions-3/src/test/java/com/baeldung/listtoprimitivearray/FloatCollector.java
new file mode 100644
index 0000000000..c280730ab0
--- /dev/null
+++ b/core-java-modules/core-java-collections-conversions-3/src/test/java/com/baeldung/listtoprimitivearray/FloatCollector.java
@@ -0,0 +1,47 @@
+package com.baeldung.listtoprimitivearray;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Set;
+import java.util.function.BiConsumer;
+import java.util.function.BinaryOperator;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.stream.Collector;
+
+public class FloatCollector implements Collector {
+
+ private final int size;
+ private int index = 0;
+ public FloatCollector(int size) {
+ this.size = size;
+ }
+
+ @Override
+ public Supplier supplier() {
+ return () -> new float[size];
+ }
+
+ @Override
+ public BiConsumer accumulator() {
+ return (array, number) -> {
+ array[index] = number;
+ index++;
+ };
+ }
+
+ @Override
+ public BinaryOperator combiner() {
+ return null;
+ }
+
+ @Override
+ public Function finisher() {
+ return Function.identity();
+ }
+
+ @Override
+ public Set characteristics() {
+ return Collections.emptySet();
+ }
+}