You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by da...@apache.org on 2025/03/11 07:49:06 UTC
(jackrabbit-oak) branch trunk updated: OAK-11573: add size api in IteratorUtils (#2159)
This is an automated email from the ASF dual-hosted git repository.
daim pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/trunk by this push:
new 60cd7597d5 OAK-11573: add size api in IteratorUtils (#2159)
60cd7597d5 is described below
commit 60cd7597d5eba9694fbf42aa25b474eb9a6def70
Author: Tushar <14...@users.noreply.github.com>
AuthorDate: Tue Mar 11 13:19:01 2025 +0530
OAK-11573: add size api in IteratorUtils (#2159)
---
.../oak/commons/collections/IteratorUtils.java | 13 +++++
.../oak/commons/collections/IteratorUtilsTest.java | 55 ++++++++++++++++++++++
2 files changed, 68 insertions(+)
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 1da3dfa3b1..dafe7f96cb 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
@@ -177,4 +177,17 @@ public class IteratorUtils {
// return true if both the iterators have same number of elements
return !iterator1.hasNext() && !iterator2.hasNext();
}
+
+ /**
+ * Returns the number of elements in the given iterator.
+ * <p>
+ * This method consumes the iterator to count the elements.
+ * A null or empty iterator returns 0.
+ *
+ * @param iterator the iterator whose size is to be determined
+ * @return the number of elements in the iterator
+ */
+ public static int size(Iterator<?> iterator) {
+ return org.apache.commons.collections4.IteratorUtils.size(iterator);
+ }
}
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 5986534bc2..6b1258ce0e 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
@@ -231,4 +231,59 @@ public class IteratorUtilsTest {
list2.set(9999, -1);
Assert.assertFalse(IteratorUtils.elementsEqual(list1.iterator(), list2.iterator()));
}
+
+ @Test
+ public void testSizeWithMultipleElements() {
+ List<String> list = Arrays.asList("one", "two", "three", "four", "five");
+ Iterator<String> iterator = list.iterator();
+ Assert.assertEquals(5, IteratorUtils.size(iterator));
+ Assert.assertFalse("Iterator should be consumed after size operation", iterator.hasNext());
+ }
+
+ @Test
+ public void testSizeWithEmptyIterator() {
+ Assert.assertEquals(0, IteratorUtils.size(Collections.emptyIterator()));
+ }
+
+ @Test
+ public void testSizeWithNullIterator() {
+ Assert.assertEquals(0,IteratorUtils.size(null));
+ }
+
+ @Test
+ public void testSizeConsumesIterator() {
+ List<String> list = Arrays.asList("one", "two", "three");
+ Iterator<String> iterator = list.iterator();
+
+ Assert.assertEquals(3, IteratorUtils.size(iterator));
+ Assert.assertFalse("Iterator should be consumed after size operation", iterator.hasNext());
+ }
+
+ @Test
+ public void testSizeWithSingleElement() {
+ List<String> singletonList = Collections.singletonList("single");
+ Assert.assertEquals(1, IteratorUtils.size(singletonList.iterator()));
+ }
+
+ @Test
+ public void testSizeWithCustomIterator() {
+ Iterator<Integer> customIterator = new Iterator<>() {
+ private int count = 0;
+
+ @Override
+ public boolean hasNext() {
+ return count < 10;
+ }
+
+ @Override
+ public Integer next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ return count++;
+ }
+ };
+ Assert.assertEquals(10, IteratorUtils.size(customIterator));
+ Assert.assertFalse("Iterator should be consumed after size operation", customIterator.hasNext());
+ }
}