|
|
@@ -5,6 +5,7 @@ import cn.hutool.core.lang.Filter;
|
|
|
import cn.hutool.core.lang.func.Func1;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.util.ArrayUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.ReflectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
|
@@ -16,6 +17,7 @@ import java.util.Iterator;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Map.Entry;
|
|
|
+import java.util.function.Function;
|
|
|
|
|
|
/**
|
|
|
* {@link Iterable} 和 {@link Iterator} 相关工具类
|
|
|
@@ -458,6 +460,82 @@ public class IterUtil {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 将列表转成值为List的HashMap
|
|
|
+ *
|
|
|
+ * @param iterable 值列表
|
|
|
+ * @param keyMapper Map的键映射
|
|
|
+ * @param <K> 键类型
|
|
|
+ * @param <V> 值类型
|
|
|
+ * @return HashMap
|
|
|
+ */
|
|
|
+ public static <K, V> Map<K, List<V>> toListMap(Iterable<V> iterable, Function<V, K> keyMapper) {
|
|
|
+ return toListMap(iterable, keyMapper, v -> v);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将列表转成值为List的HashMap
|
|
|
+ *
|
|
|
+ * @param iterable 值列表
|
|
|
+ * @param keyMapper Map的键映射
|
|
|
+ * @param valueMapper Map中List的值映射
|
|
|
+ * @param <T> 列表值类型
|
|
|
+ * @param <K> 键类型
|
|
|
+ * @param <V> 值类型
|
|
|
+ * @return HashMap
|
|
|
+ */
|
|
|
+ public static <T, K, V> Map<K, List<V>> toListMap(Iterable<T> iterable, Function<T, K> keyMapper, Function<T, V> valueMapper) {
|
|
|
+ final HashMap<K, List<V>> resultMap = MapUtil.newHashMap();
|
|
|
+
|
|
|
+ if (ObjectUtil.isNull(iterable)) {
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (T value : iterable) {
|
|
|
+ resultMap.computeIfAbsent(keyMapper.apply(value), k -> new ArrayList<>()).add(valueMapper.apply(value));
|
|
|
+ }
|
|
|
+
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将列表转成HashMap
|
|
|
+ *
|
|
|
+ * @param iterable 值列表
|
|
|
+ * @param keyMapper Map的键映射
|
|
|
+ * @param <K> 键类型
|
|
|
+ * @param <V> 值类型
|
|
|
+ * @return HashMap
|
|
|
+ */
|
|
|
+ public static <K, V> Map<K, V> toMap(Iterable<V> iterable, Function<V, K> keyMapper) {
|
|
|
+ return toMap(iterable, keyMapper, v -> v);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将列表转成HashMap
|
|
|
+ *
|
|
|
+ * @param iterable 值列表
|
|
|
+ * @param keyMapper Map的键映射
|
|
|
+ * @param valueMapper Map的值映射
|
|
|
+ * @param <T> 列表值类型
|
|
|
+ * @param <K> 键类型
|
|
|
+ * @param <V> 值类型
|
|
|
+ * @return HashMap
|
|
|
+ */
|
|
|
+ public static <T, K, V> Map<K, V> toMap(Iterable<T> iterable, Function<T, K> keyMapper, Function<T, V> valueMapper) {
|
|
|
+ final HashMap<K, V> resultMap = MapUtil.newHashMap();
|
|
|
+
|
|
|
+ if (ObjectUtil.isNull(iterable)) {
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (T value : iterable) {
|
|
|
+ resultMap.put(keyMapper.apply(value), valueMapper.apply(value));
|
|
|
+ }
|
|
|
+
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* Iterator转List<br>
|
|
|
* 不判断,直接生成新的List
|
|
|
*
|