diff --git a/CHANGELOG.md b/CHANGELOG.md
index 05ca67c26..11a6c2e7f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@
* 【all 】 JWT模块加入到all和bom包中(issue#1654@Github)
* 【core 】 CollUtil删除所有Map相关操作
* 【all 】 **重要!** 删除过期方法
+* 【core 】 增加IterChian类
### 🐞Bug修复
diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/IterChain.java b/hutool-core/src/main/java/cn/hutool/core/collection/IterChain.java
new file mode 100644
index 000000000..ec73ef039
--- /dev/null
+++ b/hutool-core/src/main/java/cn/hutool/core/collection/IterChain.java
@@ -0,0 +1,90 @@
+package cn.hutool.core.collection;
+
+import cn.hutool.core.lang.Chain;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+ * 组合{@link Iterator},将多个{@link Iterator}组合在一起,便于集中遍历。
+ * 来自Jodd
+ *
+ * @param 元素类型
+ * @author looly, jodd
+ */
+public class IterChain implements Iterator, Chain, IterChain> {
+
+ protected final List> allIterators = new ArrayList<>();
+
+ /**
+ * 构造
+ * 可以使用 {@link #addChain(Iterator)} 方法加入更多的集合。
+ */
+ public IterChain() {
+ }
+
+ /**
+ * Creates new composite iterator with provided iterators.
+ */
+ @SafeVarargs
+ public IterChain(Iterator... iterators) {
+ for (final Iterator iterator : iterators) {
+ addChain(iterator);
+ }
+ }
+
+ @Override
+ public IterChain addChain(Iterator iterator) {
+ if (allIterators.contains(iterator)) {
+ throw new IllegalArgumentException("Duplicate iterator");
+ }
+ allIterators.add(iterator);
+ return this;
+ }
+
+ // ---------------------------------------------------------------- interface
+
+ protected int currentIter = -1;
+
+ @Override
+ public boolean hasNext() {
+ if (currentIter == -1) {
+ currentIter = 0;
+ }
+
+ final int size = allIterators.size();
+ for (int i = currentIter; i < size; i++) {
+ final Iterator iterator = allIterators.get(i);
+ if (iterator.hasNext()) {
+ currentIter = i;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public T next() {
+ if (false == hasNext()) {
+ throw new NoSuchElementException();
+ }
+
+ return allIterators.get(currentIter).next();
+ }
+
+ @Override
+ public void remove() {
+ if (-1 == currentIter) {
+ throw new IllegalStateException("next() has not yet been called");
+ }
+
+ allIterators.get(currentIter).remove();
+ }
+
+ @Override
+ public Iterator> iterator() {
+ return this.allIterators.iterator();
+ }
+}