This is an automated email from the ASF dual-hosted git repository. daim pushed a commit to branch OAK-11523 in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit 1a4d9dcce8031a25768df8f4e3332571de0dbf2d Author: Rishabh Kumar <[email protected]> AuthorDate: Mon Feb 24 20:21:00 2025 +0530 OAK-11523 : added util method for replceing Guava's Iterables.filter in oak-commons module --- .../oak/commons/collections/IterableUtils.java | 13 ++++++ .../oak/commons/collections/IterableUtilsTest.java | 52 ++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IterableUtils.java b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IterableUtils.java index bea321d4b0..a9292f5fb3 100644 --- a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IterableUtils.java +++ b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IterableUtils.java @@ -260,4 +260,17 @@ public class IterableUtils { } }; } + + /** + * Filters an Iterable based on a given predicate. + * + * @param <E> the type of elements in the iterable + * @param itr the iterable to filter, may not be null + * @param predicate the predicate to apply to elements, may not be null + * @return an iterable containing only the elements that match the predicate + * @throws NullPointerException if the iterable or predicate is null + */ + public static <E> Iterable<E> filter(final Iterable<E> itr, final Predicate<? super E> predicate) { + return org.apache.commons.collections4.IterableUtils.filteredIterable(itr, predicate); + } } diff --git a/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IterableUtilsTest.java b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IterableUtilsTest.java index 1f30edca6b..5541b5b7cf 100644 --- a/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IterableUtilsTest.java +++ b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IterableUtilsTest.java @@ -393,4 +393,56 @@ public class IterableUtilsTest { Assert.assertFalse(iterator.hasNext()); Assert.assertThrows(NoSuchElementException.class, iterator::next); } + + @Test + public void testFilterWithNonEmptyIterable() { + Iterable<Integer> iterable = Arrays.asList(1, 2, 3, 4, 5); + Predicate<Integer> predicate = x -> x % 2 == 0; + Iterable<Integer> filtered = IterableUtils.filter(iterable, predicate); + List<Integer> result = ListUtils.toList(filtered.iterator()); + Assert.assertEquals(Arrays.asList(2, 4), result); + } + + @Test + public void testFilterWithEmptyIterable() { + Iterable<Integer> iterable = Collections.emptyList(); + Predicate<Integer> predicate = x -> x % 2 == 0; + Iterable<Integer> filtered = IterableUtils.filter(iterable, predicate); + List<Integer> result = ListUtils.toList(filtered.iterator()); + Assert.assertTrue(result.isEmpty()); + } + + @Test + public void testFilterWithAllMatchingElements() { + Iterable<Integer> iterable = Arrays.asList(2, 4, 6); + Predicate<Integer> predicate = x -> x % 2 == 0; + Iterable<Integer> filtered = IterableUtils.filter(iterable, predicate); + List<Integer> result = ListUtils.toList(filtered.iterator()); + Assert.assertEquals(Arrays.asList(2, 4, 6), result); + } + + @Test + public void testFilterWithNoMatchingElements() { + Iterable<Integer> iterable = Arrays.asList(1, 3, 5); + Predicate<Integer> predicate = x -> x % 2 == 0; + Iterable<Integer> filtered = IterableUtils.filter(iterable, predicate); + List<Integer> result = ListUtils.toList(filtered.iterator()); + Assert.assertTrue(result.isEmpty()); + } + + @Test + public void testFilterWithNullIterable() { + Predicate<Integer> predicate = x -> x % 2 == 0; + Assert.assertThrows(NullPointerException.class, () -> { + IterableUtils.filter(null, predicate); + }); + } + + @Test + public void testFilterWithNullPredicate() { + Iterable<Integer> iterable = Arrays.asList(1, 2, 3); + Assert.assertThrows(NullPointerException.class, () -> { + IterableUtils.filter(iterable, null); + }); + } }
