This is an automated email from the ASF dual-hosted git repository. daim pushed a commit to branch OAK-11585 in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit a637a4eaa9b847ce453740190a5f89add7de7cef Author: Rishabh Kumar <[email protected]> AuthorDate: Mon Apr 14 18:32:43 2025 +0530 OAK-11585 : added Iterators.contains replacement in oak-commons --- .../oak/commons/collections/IteratorUtils.java | 20 ++++++++++ .../oak/commons/collections/package-info.java | 2 +- .../oak/commons/collections/IteratorUtilsTest.java | 44 ++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtils.java b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtils.java index 660a0c165d..9701d92632 100644 --- a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtils.java +++ b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtils.java @@ -230,4 +230,24 @@ public class IteratorUtils { } } } + + /** + * Checks if the given iterator contains the specified element. + * <p> + * This method iterates through the iterator, checking each element for equality with + * the specified object using {@link Objects#equals(Object, Object)}. The iteration stops + * once a match is found or the iterator is exhausted. + * <p> + * Note that this method will consume the iterator. + * + * @param <?> the type of objects in the iterator + * @param iterator the iterator to check, must not be null + * @param element the element to find, may be null + * @return {@code true} if the iterator contains the element, {@code false} otherwise + * @throws NullPointerException if the iterator is null + */ + public static boolean contains(Iterator<?> iterator, Object element) { + Objects.requireNonNull(iterator, "Iterator must not be null"); + return org.apache.commons.collections4.IteratorUtils.contains(iterator, element); + } } diff --git a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/package-info.java b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/package-info.java index fa16acc93d..81c20db5ca 100644 --- a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/package-info.java +++ b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/package-info.java @@ -21,7 +21,7 @@ * Utilities for Java collections and streams. */ @Internal(since = "1.0.0") -@Version("2.1.0") +@Version("2.2.0") package org.apache.jackrabbit.oak.commons.collections; import org.apache.jackrabbit.oak.commons.annotations.Internal; import org.osgi.annotation.versioning.Version; diff --git a/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtilsTest.java b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtilsTest.java index df21b5d115..6883df39b1 100644 --- a/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtilsTest.java +++ b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtilsTest.java @@ -414,4 +414,48 @@ public class IteratorUtilsTest { Assert.assertEquals(obj2, IteratorUtils.getLast(objectIterator)); Assert.assertFalse(objectIterator.hasNext()); } + + @Test + public void testContainsWithElementPresent() { + Iterator<String> iterator = Arrays.asList("a", "b", "c").iterator(); + Assert.assertTrue(IteratorUtils.contains(iterator, "b")); + // Iterator shouldn't be consumed + Assert.assertTrue(iterator.hasNext()); + } + + @Test + public void testContainsWithElementNotPresent() { + Iterator<String> iterator = Arrays.asList("a", "b", "c").iterator(); + Assert.assertFalse(IteratorUtils.contains(iterator, "z")); + // Iterator should be consumed + Assert.assertFalse(iterator.hasNext()); + } + + @Test(expected = NullPointerException.class) + public void testContainsWithNullIterator() { + IteratorUtils.contains(null, "test"); + } + + @Test + public void testContainsWithEmptyIterator() { + Iterator<String> emptyIterator = Collections.emptyIterator(); + Assert.assertFalse(IteratorUtils.contains(emptyIterator, "anything")); + } + + @Test + public void testContainsWithNullElement() { + Iterator<String> iterator = Arrays.asList("a", null, "c").iterator(); + Assert.assertTrue(IteratorUtils.contains(iterator, null)); + // Iterator should be stopped after finding null + Assert.assertTrue(iterator.hasNext()); + } + + @Test + public void testContainsWithMultipleOccurrences() { + Iterator<String> iterator = Arrays.asList("a", "b", "b", "c").iterator(); + Assert.assertTrue(IteratorUtils.contains(iterator, "b")); + // Iterator should stop at first occurrence + Assert.assertTrue(iterator.hasNext()); + Assert.assertEquals("b", iterator.next()); + } }
