diff --git a/core-java-collections/pom.xml b/core-java-collections/pom.xml
index a5aea49c14..d63f4d2a45 100644
--- a/core-java-collections/pom.xml
+++ b/core-java-collections/pom.xml
@@ -36,15 +36,32 @@
commons-lang3
${commons-lang3.version}
+
+ org.eclipse.collections
+ eclipse-collections-api
+ 9.2.0
+
+
+ org.eclipse.collections
+ eclipse-collections
+ 9.2.0
+
org.assertj
assertj-core
${assertj.version}
test
+
+ org.junit.platform
+ junit-platform-runner
+ ${junit.platform.version}
+ test
+
+ 1.2.0
3.5
4.1
4.01
diff --git a/core-java-collections/src/main/java/com/baeldung/java/filtering/CollectionUtilsCollectionFilter.java b/core-java-collections/src/main/java/com/baeldung/java/filtering/CollectionUtilsCollectionFilter.java
new file mode 100644
index 0000000000..4d6a3d62fd
--- /dev/null
+++ b/core-java-collections/src/main/java/com/baeldung/java/filtering/CollectionUtilsCollectionFilter.java
@@ -0,0 +1,22 @@
+package com.baeldung.java.filtering;
+
+import java.util.Collection;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
+
+public class CollectionUtilsCollectionFilter {
+
+ static public Collection findEvenNumbers(Collection baseCollection) {
+ Predicate apacheEventNumberPredicate = new Predicate() {
+
+ @Override
+ public boolean evaluate(Integer object) {
+ return object % 2 == 0;
+ }
+ };
+
+ CollectionUtils.filter(baseCollection, apacheEventNumberPredicate);
+ return baseCollection;
+ }
+}
diff --git a/core-java-collections/src/main/java/com/baeldung/java/filtering/EclipseCollectionsCollectionFilter.java b/core-java-collections/src/main/java/com/baeldung/java/filtering/EclipseCollectionsCollectionFilter.java
new file mode 100644
index 0000000000..981d6ca241
--- /dev/null
+++ b/core-java-collections/src/main/java/com/baeldung/java/filtering/EclipseCollectionsCollectionFilter.java
@@ -0,0 +1,32 @@
+package com.baeldung.java.filtering;
+
+import java.util.Collection;
+
+import org.eclipse.collections.api.block.predicate.Predicate;
+import org.eclipse.collections.impl.factory.Lists;
+import org.eclipse.collections.impl.utility.Iterate;
+
+public class EclipseCollectionsCollectionFilter {
+
+ static public Collection findEvenNumbers(Collection baseCollection) {
+ Predicate eclipsePredicate = item -> item % 2 == 0;
+ Collection filteredList = Lists.mutable.ofAll(baseCollection)
+ .select(eclipsePredicate);
+
+ return filteredList;
+ }
+
+ static public Collection findEvenNumbersUsingIterate(Collection baseCollection) {
+ Predicate eclipsePredicate = new Predicate() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public boolean accept(Integer arg0) {
+ return arg0 % 2 == 0;
+ }
+ };
+ Collection filteredList = Iterate.select(baseCollection, eclipsePredicate);
+
+ return filteredList;
+ }
+}
diff --git a/core-java-collections/src/main/java/com/baeldung/java/filtering/GuavaCollectionFilter.java b/core-java-collections/src/main/java/com/baeldung/java/filtering/GuavaCollectionFilter.java
new file mode 100644
index 0000000000..f5a27f0bdb
--- /dev/null
+++ b/core-java-collections/src/main/java/com/baeldung/java/filtering/GuavaCollectionFilter.java
@@ -0,0 +1,22 @@
+package com.baeldung.java.filtering;
+
+import java.util.Collection;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
+
+public class GuavaCollectionFilter {
+
+ static public Collection findEvenNumbers(Collection baseCollection) {
+ Predicate guavaPredicate = new Predicate() {
+
+ @Override
+ public boolean apply(Integer input) {
+ return input % 2 == 0;
+ }
+ };
+ Collection filteredCollection = Collections2.filter(baseCollection, guavaPredicate);
+ return filteredCollection;
+ }
+
+}
diff --git a/core-java-collections/src/main/java/com/baeldung/java/filtering/StreamsCollectionFilter.java b/core-java-collections/src/main/java/com/baeldung/java/filtering/StreamsCollectionFilter.java
new file mode 100644
index 0000000000..d51283de55
--- /dev/null
+++ b/core-java-collections/src/main/java/com/baeldung/java/filtering/StreamsCollectionFilter.java
@@ -0,0 +1,37 @@
+package com.baeldung.java.filtering;
+
+import java.util.Collection;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+public class StreamsCollectionFilter {
+
+ public static Collection filterCollectionHelperMethod(Collection baseCollection, Predicate predicate) {
+ return baseCollection.stream()
+ .filter(predicate)
+ .collect(Collectors.toList());
+ }
+
+ static public Collection findEvenNumbersUsingHelperMethod(Collection baseCollection) {
+ return filterCollectionHelperMethod(baseCollection, item -> item % 2 == 0);
+ }
+
+ static public Collection findEvenNumbersUsingLambda(Collection baseCollection) {
+ return baseCollection.stream()
+ .filter(item -> item % 2 == 0)
+ .collect(Collectors.toList());
+ }
+
+ static public Collection findEvenNumbersUsingPredicate(Collection baseCollection) {
+ Predicate evenNumberPredicate = new Predicate() {
+ @Override
+ public boolean test(Integer i) {
+ return i % 2 == 0;
+ }
+ };
+
+ return baseCollection.stream()
+ .filter(evenNumberPredicate)
+ .collect(Collectors.toList());
+ }
+}
diff --git a/core-java-collections/src/test/java/com/baeldung/java/filtering/CollectionFiltersUnitTest.java b/core-java-collections/src/test/java/com/baeldung/java/filtering/CollectionFiltersUnitTest.java
new file mode 100644
index 0000000000..c85b7a526d
--- /dev/null
+++ b/core-java-collections/src/test/java/com/baeldung/java/filtering/CollectionFiltersUnitTest.java
@@ -0,0 +1,46 @@
+package com.baeldung.java.filtering;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.jupiter.api.Test;
+import org.junit.platform.runner.JUnitPlatform;
+import org.junit.runner.RunWith;
+
+@RunWith(JUnitPlatform.class)
+public class CollectionFiltersUnitTest {
+
+ private static final Collection BASE_INTEGER_COLLECTION = Arrays.asList(9, 14, 2, 7, 1, 5, 8);
+ private static final Collection EXPECTED_EVEN_FILTERED_COLLECTION = Arrays.asList(14, 2, 8);
+
+ @Test
+ public void givenAStringCollection_whenFilteringFourLetterWords_thenObtainTheFilteredCollection() {
+ final Collection baseStrings = Arrays.asList("java", "baeldung", "type", "example", "other");
+
+ Collection filtered = StreamsCollectionFilter.filterCollectionHelperMethod(baseStrings, item -> item.length() == 4);
+
+ assertThat(filtered).containsExactlyInAnyOrder("java", "type");
+ }
+
+ @Test
+ public void givenAnIntegerCollection_whenFilteringEvenValues_thenObtainTheFilteredCollectionForAllCases() {
+ Collection filteredWithStreams1 = StreamsCollectionFilter.findEvenNumbersUsingLambda(BASE_INTEGER_COLLECTION);
+ Collection filteredWithStreams2 = StreamsCollectionFilter.findEvenNumbersUsingPredicate(BASE_INTEGER_COLLECTION);
+ Collection filteredWithCollectionUtils = CollectionUtilsCollectionFilter.findEvenNumbers(new ArrayList<>(BASE_INTEGER_COLLECTION));
+ Collection filteredWithEclipseCollections = EclipseCollectionsCollectionFilter.findEvenNumbers(BASE_INTEGER_COLLECTION);
+ Collection filteredWithEclipseCollectionsUsingIterate = EclipseCollectionsCollectionFilter.findEvenNumbersUsingIterate(BASE_INTEGER_COLLECTION);
+ Collection filteredWithGuava = GuavaCollectionFilter.findEvenNumbers(BASE_INTEGER_COLLECTION);
+
+ assertThat(filteredWithStreams1).hasSameElementsAs(filteredWithStreams2)
+ .hasSameElementsAs(filteredWithCollectionUtils)
+ .hasSameElementsAs(filteredWithEclipseCollections)
+ .hasSameElementsAs(filteredWithEclipseCollectionsUsingIterate)
+ .hasSameElementsAs(filteredWithEclipseCollectionsUsingIterate)
+ .hasSameElementsAs(filteredWithGuava)
+ .hasSameElementsAs(EXPECTED_EVEN_FILTERED_COLLECTION);
+ }
+
+}