result = new ArrayList<>();
if (null != iter) {
V value;
while (iter.hasNext()) {
value = iter.next();
- result.add(FieldUtil.getFieldValue(value, fieldName));
+ result.add((R)FieldUtil.getFieldValue(value, fieldName));
}
}
return result;
@@ -378,7 +370,7 @@ public class IterUtil {
}
/**
- * 将列表转成值为List的HashMap
+ * 将列表转成值为List的Map集合
*
* @param resultMap 结果Map,可自定义结果Map类型
* @param iterable 值列表
@@ -702,38 +694,40 @@ public class IterUtil {
}
/**
- * 判断两个{@link Iterable} 是否元素和顺序相同,返回{@code true}的条件是:
+ * 判断两个{@link Iterable}中的元素与其顺序是否相同
+ * 当满足下列情况时返回{@code true}:
*
- * - 两个{@link Iterable}必须长度相同
- * - 两个{@link Iterable}元素相同index的对象必须equals,满足{@link Objects#equals(Object, Object)}
+ * - 两个{@link Iterable}都为{@code null};
+ * - 两个{@link Iterable}满足{@code iterable1 == iterable2};
+ * - 两个{@link Iterable}所有具有相同下标的元素皆满足{@link Objects#equals(Object, Object)};
*
* 此方法来自Apache-Commons-Collections4。
*
- * @param list1 列表1
- * @param list2 列表2
+ * @param iterable1 列表1
+ * @param iterable2 列表2
* @return 是否相同
* @since 5.6.0
*/
- public static boolean isEqualList(final Iterable> list1, final Iterable> list2) {
- if (list1 == list2) {
+ public static boolean isEqualList(final Iterable> iterable1, final Iterable> iterable2) {
+ if (iterable1 == iterable2) {
return true;
}
-
- final Iterator> it1 = list1.iterator();
- final Iterator> it2 = list2.iterator();
+ if (iterable1 == null || iterable2 == null) {
+ return false;
+ }
+ final Iterator> iter1 = iterable1.iterator();
+ final Iterator> iter2 = iterable2.iterator();
Object obj1;
Object obj2;
- while (it1.hasNext() && it2.hasNext()) {
- obj1 = it1.next();
- obj2 = it2.next();
-
+ while (iter1.hasNext() && iter2.hasNext()) {
+ obj1 = iter1.next();
+ obj2 = iter2.next();
if (false == Objects.equals(obj1, obj2)) {
return false;
}
}
-
// 当两个Iterable长度不一致时返回false
- return false == (it1.hasNext() || it2.hasNext());
+ return false == (iter1.hasNext() || iter2.hasNext());
}
/**
diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/iter/IterableIter.java b/hutool-core/src/main/java/cn/hutool/core/collection/iter/IterableIter.java
index d09f337a1..379e8741e 100644
--- a/hutool-core/src/main/java/cn/hutool/core/collection/iter/IterableIter.java
+++ b/hutool-core/src/main/java/cn/hutool/core/collection/iter/IterableIter.java
@@ -15,4 +15,5 @@ public interface IterableIter extends Iterable, Iterator {
default Iterator iterator() {
return this;
}
+
}
diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/iter/IteratorEnumeration.java b/hutool-core/src/main/java/cn/hutool/core/collection/iter/IteratorEnumeration.java
index 5ccd3b2e9..2511145d9 100644
--- a/hutool-core/src/main/java/cn/hutool/core/collection/iter/IteratorEnumeration.java
+++ b/hutool-core/src/main/java/cn/hutool/core/collection/iter/IteratorEnumeration.java
@@ -16,6 +16,8 @@ public class IteratorEnumeration implements Enumeration, Serializable{
private final Iterator iterator;
+
+
/**
* 构造
* @param iterator {@link Iterator}对象
diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/partition/AvgPartition.java b/hutool-core/src/main/java/cn/hutool/core/collection/partition/AvgPartition.java
index ec6bf0de3..8998e6e94 100644
--- a/hutool-core/src/main/java/cn/hutool/core/collection/partition/AvgPartition.java
+++ b/hutool-core/src/main/java/cn/hutool/core/collection/partition/AvgPartition.java
@@ -1,6 +1,5 @@
package cn.hutool.core.collection.partition;
-import cn.hutool.core.collection.partition.Partition;
import cn.hutool.core.lang.Assert;
import java.util.List;
diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/iter/EnumerationIterTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/iter/EnumerationIterTest.java
new file mode 100644
index 000000000..8c2b6b0c3
--- /dev/null
+++ b/hutool-core/src/test/java/cn/hutool/core/collection/iter/EnumerationIterTest.java
@@ -0,0 +1,46 @@
+package cn.hutool.core.collection.iter;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+
+/**
+ * @author huangchengxing
+ */
+public class EnumerationIterTest {
+
+ @Test
+ public void testHasNext() {
+ Enumeration enumeration = new IteratorEnumeration<>(Arrays.asList(1, 2, 3).iterator());
+ EnumerationIter iter = new EnumerationIter<>(enumeration);
+ Assert.assertTrue(iter.hasNext());
+ Assert.assertFalse(new EnumerationIter<>(new IteratorEnumeration<>(Collections.emptyIterator())).hasNext());
+ }
+
+ @Test
+ public void testNext() {
+ Enumeration enumeration = new IteratorEnumeration<>(Arrays.asList(1, 2, 3).iterator());
+ EnumerationIter iter = new EnumerationIter<>(enumeration);
+ Assert.assertEquals((Integer)1, iter.next());
+ Assert.assertEquals((Integer)2, iter.next());
+ Assert.assertEquals((Integer)3, iter.next());
+ }
+
+ @Test
+ public void testRemove() {
+ Enumeration enumeration = new IteratorEnumeration<>(Arrays.asList(1, 2, 3).iterator());
+ EnumerationIter iter = new EnumerationIter<>(enumeration);
+ Assert.assertThrows(UnsupportedOperationException.class, iter::remove);
+ }
+
+ @Test
+ public void testIterator() {
+ Enumeration enumeration = new IteratorEnumeration<>(Arrays.asList(1, 2, 3).iterator());
+ EnumerationIter iter = new EnumerationIter<>(enumeration);
+ Assert.assertSame(iter, iter.iterator());
+ }
+
+}
diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/iter/IterChainTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/iter/IterChainTest.java
index 96d49471b..26676f85b 100644
--- a/hutool-core/src/test/java/cn/hutool/core/collection/iter/IterChainTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/collection/iter/IterChainTest.java
@@ -13,17 +13,20 @@ import java.util.Iterator;
public class IterChainTest {
@Test
- public void addChain() {
+ public void testAddChain() {
Iterator iter1 = Arrays.asList(1, 2).iterator();
Iterator iter2 = Arrays.asList(3, 4).iterator();
IterChain iterChain = new IterChain<>();
Assert.assertSame(iterChain, iterChain.addChain(iter1));
Assert.assertSame(iterChain, iterChain.addChain(iter2));
Assert.assertEquals(2, iterChain.allIterators.size());
+
+ iterChain = new IterChain<>(iter1, iter2);
+ Assert.assertEquals(2, iterChain.allIterators.size());
}
@Test
- public void hasNext() {
+ public void testHasNext() {
IterChain iterChain = new IterChain<>();
Assert.assertFalse(iterChain.hasNext());
Assert.assertFalse(iterChain.addChain(Collections.emptyIterator()).hasNext());
@@ -31,7 +34,7 @@ public class IterChainTest {
}
@Test
- public void next() {
+ public void testNext() {
Iterator iter1 = Arrays.asList(1, 2).iterator();
Iterator iter2 = Arrays.asList(3, 4).iterator();
IterChain iterChain = new IterChain<>();
@@ -44,14 +47,14 @@ public class IterChainTest {
}
@Test
- public void remove() {
+ public void testRemove() {
IterChain iterChain = new IterChain<>();
iterChain.addChain(Arrays.asList(1, 2).iterator());
Assert.assertThrows(IllegalStateException.class, iterChain::remove);
}
@Test
- public void iterator() {
+ public void testIterator() {
Iterator iter1 = Arrays.asList(1, 2).iterator();
Iterator iter2 = Arrays.asList(3, 4).iterator();
IterChain iterChain = new IterChain<>();
diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/iter/IterUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/iter/IterUtilTest.java
index b9f64521d..be901e74d 100644
--- a/hutool-core/src/test/java/cn/hutool/core/collection/iter/IterUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/collection/iter/IterUtilTest.java
@@ -1,12 +1,12 @@
package cn.hutool.core.collection.iter;
+import lombok.RequiredArgsConstructor;
import org.junit.Assert;
import org.junit.Test;
+import org.w3c.dom.NodeList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.*;
+import java.util.function.Function;
/**
* test for {@link IterUtil}
@@ -17,6 +17,13 @@ public class IterUtilTest {
public void testGetIter() {
Assert.assertNull(IterUtil.getIter(null));
Assert.assertEquals(Collections.emptyIterator(), IterUtil.getIter(Collections.emptyList()));
+
+ Assert.assertNull(IterUtil.getIter((Object)null));
+ Assert.assertNotNull(IterUtil.getIter(Collections.emptyIterator()));
+ Assert.assertNotNull(IterUtil.getIter((Object)Collections.emptyList()));
+ Assert.assertNotNull(IterUtil.getIter(new Integer[0]));
+ Assert.assertNotNull(IterUtil.getIter(Collections.emptyMap()));
+ Assert.assertNull(IterUtil.getIter((NodeList)null));
}
@Test
@@ -64,4 +71,236 @@ public class IterUtilTest {
Assert.assertEquals((Integer)1, countMap.get(o2));
}
+ @Test
+ public void testFieldValueMap() {
+ Bean bean1 = new Bean(1, "A");
+ Bean bean2 = new Bean(2, "B");
+ Map map = IterUtil.fieldValueMap(Arrays.asList(bean1, bean2).iterator(), "id");
+ Assert.assertEquals(bean1, map.get(1));
+ Assert.assertEquals(bean2, map.get(2));
+ }
+
+ @Test
+ public void testFieldValueAsMap() {
+ Bean bean1 = new Bean(1, "A");
+ Bean bean2 = new Bean(2, "B");
+ Map map = IterUtil.fieldValueAsMap(
+ Arrays.asList(bean1, bean2).iterator(), "id", "name"
+ );
+ Assert.assertEquals("A", map.get(1));
+ Assert.assertEquals("B", map.get(2));
+ }
+
+ @Test
+ public void testFieldValueList() {
+ Bean bean1 = new Bean(1, "A");
+ Bean bean2 = new Bean(2, "B");
+ Assert.assertEquals(Arrays.asList(1, 2), IterUtil.fieldValueList(Arrays.asList(bean1, bean2), "id"));
+ Assert.assertEquals(
+ Arrays.asList(1, 2),
+ IterUtil.fieldValueList(Arrays.asList(bean1, bean2).iterator(), "id")
+ );
+ }
+
+ @Test
+ public void testJoin() {
+ List stringList = Arrays.asList("1", "2", "3");
+ Assert.assertEquals("123", IterUtil.join(stringList.iterator(), ""));
+ Assert.assertEquals("-1--2--3-", IterUtil.join(stringList.iterator(), "", "-", "-"));
+ Assert.assertEquals("123", IterUtil.join(stringList.iterator(), "", Function.identity()));
+ }
+
+ @Test
+ public void testToMap() {
+ List keys = Arrays.asList(1, 2, 3);
+
+ Map map = IterUtil.toMap(keys, keys);
+ Assert.assertEquals(keys, new ArrayList<>(map.keySet()));
+ Assert.assertEquals(keys, new ArrayList<>(map.values()));
+
+ map = IterUtil.toMap(keys.iterator(), keys.iterator());
+ Assert.assertEquals(keys, new ArrayList<>(map.keySet()));
+ Assert.assertEquals(keys, new ArrayList<>(map.values()));
+
+ map = IterUtil.toMap(keys.iterator(), keys.iterator(), true);
+ Assert.assertEquals(keys, new ArrayList<>(map.keySet()));
+ Assert.assertEquals(keys, new ArrayList<>(map.values()));
+
+ map = IterUtil.toMap(keys, keys, true);
+ Assert.assertEquals(keys, new ArrayList<>(map.keySet()));
+ Assert.assertEquals(keys, new ArrayList<>(map.values()));
+
+ map = IterUtil.toMap(keys, Function.identity());
+ Assert.assertEquals(keys, new ArrayList<>(map.keySet()));
+ Assert.assertEquals(keys, new ArrayList<>(map.values()));
+
+ map = IterUtil.toMap(keys, Function.identity(), Function.identity());
+ Assert.assertEquals(keys, new ArrayList<>(map.keySet()));
+ Assert.assertEquals(keys, new ArrayList<>(map.values()));
+ }
+
+ @Test
+ public void testToListMap() {
+ List keys = Arrays.asList(1, 2, 3, 4);
+
+ Map> map = IterUtil.toListMap(keys, i -> (i & 1) == 0, Function.identity());
+ Assert.assertEquals(Arrays.asList(2, 4), map.get(true));
+ Assert.assertEquals(Arrays.asList(1, 3), map.get(false));
+
+ map = IterUtil.toListMap(keys, i -> (i & 1) == 0);
+ Assert.assertEquals(Arrays.asList(2, 4), map.get(true));
+ Assert.assertEquals(Arrays.asList(1, 3), map.get(false));
+
+ map = new LinkedHashMap<>();
+ Map> rawMap = IterUtil.toListMap(map, keys, i -> (i & 1) == 0, Function.identity());
+ Assert.assertSame(rawMap, map);
+ Assert.assertEquals(Arrays.asList(2, 4), rawMap.get(true));
+ Assert.assertEquals(Arrays.asList(1, 3), rawMap.get(false));
+ }
+
+ @Test
+ public void testAsIterable() {
+ Iterator iter = Arrays.asList(1, 2, 3).iterator();
+ Assert.assertEquals(iter, IterUtil.asIterable(iter).iterator());
+ Assert.assertNull(IterUtil.asIterable(null).iterator());
+
+ Enumeration enumeration = new IteratorEnumeration<>(iter);
+ Iterator iter2 = IterUtil.asIterator(enumeration);
+ Assert.assertEquals((Integer)1, iter2.next());
+ Assert.assertEquals((Integer)2, iter2.next());
+ Assert.assertEquals((Integer)3, iter2.next());
+ }
+
+ @Test
+ public void testGet() {
+ Iterator iter = Arrays.asList(1, 2, 3, 4).iterator();
+ Assert.assertEquals((Integer)3, IterUtil.get(iter, 2));
+ Assert.assertThrows(IllegalArgumentException.class, () -> IterUtil.get(iter, -1));
+ }
+
+ @Test
+ public void testGetFirst() {
+ Iterator iter = Arrays.asList(1, 2, 3, 4).iterator();
+ Assert.assertEquals((Integer)1, IterUtil.getFirst(iter));
+ Assert.assertNull(IterUtil.getFirst(null));
+ Assert.assertNull(IterUtil.getFirst(Collections.emptyIterator()));
+
+ Assert.assertEquals((Integer)2, IterUtil.getFirst(iter, t -> (t & 1) == 0));
+ Assert.assertNull(IterUtil.getFirst((Iterator)null, t -> (t & 1) == 0));
+ Assert.assertNull(IterUtil.getFirst(Collections.emptyIterator(), Objects::nonNull));
+ }
+
+ @Test
+ public void testGetFirstNoneNull() {
+ Iterator iter = Arrays.asList(null, 2, null, 4).iterator();
+ Assert.assertEquals((Integer)2, IterUtil.getFirstNoneNull(iter));
+ Assert.assertNull(IterUtil.getFirstNoneNull(null));
+ Assert.assertNull(IterUtil.getFirstNoneNull(Collections.emptyIterator()));
+ }
+
+ @Test
+ public void testGetElementType() {
+ List