diff --git a/core-java-modules/core-java-collections-array-list-2/pom.xml b/core-java-modules/core-java-collections-array-list-2/pom.xml
index b436324dca3a..ce3989ca2c8d 100644
--- a/core-java-modules/core-java-collections-array-list-2/pom.xml
+++ b/core-java-modules/core-java-collections-array-list-2/pom.xml
@@ -12,6 +12,14 @@
0.0.1-SNAPSHOT
+
+
+ org.apache.commons
+ commons-collections4
+ ${apache.commons.version}
+
+
+
@@ -28,5 +36,6 @@
17
17
+ 4.4
diff --git a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/addallnulls/AddAllWithNullsUnitTest.java b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/addallnulls/AddAllWithNullsUnitTest.java
new file mode 100644
index 000000000000..fa470fc975ba
--- /dev/null
+++ b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/addallnulls/AddAllWithNullsUnitTest.java
@@ -0,0 +1,89 @@
+package com.baeldung.addallnulls;
+
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+import static org.assertj.core.api.Assertions.assertThatNoException;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Stream;
+import org.apache.commons.collections4.CollectionUtils;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.NullSource;
+
+class AddAllWithNullsUnitTest {
+
+ @ParameterizedTest
+ @NullSource
+ void givenNull_whenAddAll_thenAddThrowsNPE(List list) {
+ ArrayList strings = new ArrayList<>();
+ assertThatExceptionOfType(NullPointerException.class).isThrownBy(() -> strings.addAll(list));
+ }
+
+ @ParameterizedTest
+ @NullSource
+ void givenNull_whenAddAllWithCheck_thenNoNPE(List list) {
+ ArrayList strings = new ArrayList<>();
+ assertThatNoException().isThrownBy(() -> {
+ if (list != null) {
+ strings.addAll(list);
+ }
+ });
+ }
+
+ @ParameterizedTest
+ @NullSource
+ void givenNull_whenAddAllWithCollectionCheck_thenNoNPE(List list) {
+ ArrayList strings = new ArrayList<>();
+ assertThatNoException().isThrownBy(() -> {
+ strings.addAll(CollectionUtils.emptyIfNull(list));
+ });
+ }
+
+ @ParameterizedTest
+ @NullSource
+ void givenNull_whenAddAllWithExternalizedCheck_thenNoNPE(List list) {
+ ArrayList strings = new ArrayList<>();
+ assertThatNoException().isThrownBy(() -> {
+ addIfNonNull(list, strings);
+ });
+ }
+
+ private static void addIfNonNull(List list, ArrayList strings) {
+ if (list != null) {
+ strings.addAll(list);
+ }
+ }
+
+ @ParameterizedTest
+ @NullSource
+ void givenNull_whenAddAllWithOptional_thenNoNPE(List list) {
+ ArrayList strings = new ArrayList<>();
+ assertThatNoException().isThrownBy(() -> {
+ Optional.ofNullable(list).ifPresent(strings::addAll);
+ });
+ }
+
+ @ParameterizedTest
+ @MethodSource("listProvider")
+ void givenCollectionOfNullableLists_whenFilter_thenNoNPE(List> listOfLists) {
+ ArrayList strings = new ArrayList<>();
+ assertThatNoException().isThrownBy(() -> {
+ listOfLists.stream().filter(Objects::nonNull).forEach(strings::addAll);
+ });
+ }
+
+ static Stream>> listProvider() {
+ ArrayList> lists = new ArrayList<>();
+ lists.add(null);
+ lists.add(List.of("Hello"));
+ lists.add(null);
+ lists.add(List.of("World"));
+ lists.add(null);
+ return Stream.of(
+ lists
+ );
+ }
+}