diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/ComputeIter.java b/hutool-core/src/main/java/cn/hutool/core/collection/ComputeIter.java index 86de3a064e..e605c64b91 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/ComputeIter.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/ComputeIter.java @@ -70,4 +70,12 @@ public abstract class ComputeIter implements Iterator { this.finished = true; this.next = null; } + + /** + * 重置状态,用于再次遍历 + */ + public void resetState() { + this.finished = false; + this.next = null; + } } diff --git a/hutool-core/src/main/java/cn/hutool/core/text/split/SplitIter.java b/hutool-core/src/main/java/cn/hutool/core/text/split/SplitIter.java index f24760af43..330b988aed 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/split/SplitIter.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/split/SplitIter.java @@ -105,6 +105,7 @@ public class SplitIter extends ComputeIter implements Serializable { this.finder.reset(); this.offset = 0; this.count = 0; + resetState(); } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/text/split/SplitIterTest.java b/hutool-core/src/test/java/cn/hutool/core/text/split/SplitIterTest.java index c82fae99f0..64c30b0898 100644 --- a/hutool-core/src/test/java/cn/hutool/core/text/split/SplitIterTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/text/split/SplitIterTest.java @@ -1,9 +1,6 @@ package cn.hutool.core.text.split; -import cn.hutool.core.text.finder.CharFinder; -import cn.hutool.core.text.finder.LengthFinder; -import cn.hutool.core.text.finder.PatternFinder; -import cn.hutool.core.text.finder.StrFinder; +import cn.hutool.core.text.finder.*; import org.junit.jupiter.api.Test; import java.util.Arrays; @@ -169,4 +166,19 @@ public class SplitIterTest { assertEquals(Collections.singletonList("test"), result); } + + @Test + public void issueIDFN7YTest() { + final String text = "a,b,c"; + final TextFinder finder = new StrFinder(",", false); + final SplitIter splitIter = new SplitIter(text, finder, 0, false); + + List firstResult = splitIter.toList(false); + assertEquals(3, firstResult.size()); + + splitIter.reset(); + List secondResult = splitIter.toList(false); + assertEquals(3, secondResult.size()); + assertEquals(firstResult, secondResult); + } }