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(); + } +}