Browse Source

add methods

Looly 5 years ago
parent
commit
008855fafb
2 changed files with 43 additions and 2 deletions
  1. 1 0
      CHANGELOG.md
  2. 42 2
      hutool-core/src/main/java/cn/hutool/core/collection/IterUtil.java

+ 1 - 0
CHANGELOG.md

@@ -12,6 +12,7 @@
 * 【core   】     Snowflake循环等待下一个时间时避免长时间循环,加入对时钟倒退的判断(pr#874@Github)
 * 【extra  】     新增 QRCode base64 编码形式返回(pr#878@Github)
 * 【core   】     ImgUtil增加toBase64DateUri,URLUtil增加getDataUri方法
+* 【core   】     IterUtil添加List转Map的工具方法(pr#123@Gitee)
 
 ### Bug修复
 

+ 42 - 2
hutool-core/src/main/java/cn/hutool/core/collection/IterUtil.java

@@ -467,6 +467,7 @@ public class IterUtil {
 	 * @param <K>       键类型
 	 * @param <V>       值类型
 	 * @return HashMap
+	 * @since 5.3.6
 	 */
 	public static <K, V> Map<K, List<V>> toListMap(Iterable<V> iterable, Function<V, K> keyMapper) {
 		return toListMap(iterable, keyMapper, v -> v);
@@ -482,10 +483,29 @@ public class IterUtil {
 	 * @param <K>         键类型
 	 * @param <V>         值类型
 	 * @return HashMap
+	 * @since 5.3.6
 	 */
 	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();
+		return toListMap(MapUtil.newHashMap(), iterable, keyMapper, valueMapper);
+	}
 
+	/**
+	 * 将列表转成值为List的HashMap
+	 *
+	 * @param resultMap   结果Map,可自定义结果Map类型
+	 * @param iterable    值列表
+	 * @param keyMapper   Map的键映射
+	 * @param valueMapper Map中List的值映射
+	 * @param <T>         列表值类型
+	 * @param <K>         键类型
+	 * @param <V>         值类型
+	 * @return HashMap
+	 * @since 5.3.6
+	 */
+	public static <T, K, V> Map<K, List<V>> toListMap(Map<K, List<V>> resultMap, Iterable<T> iterable, Function<T, K> keyMapper, Function<T, V> valueMapper) {
+		if (null == resultMap) {
+			resultMap = MapUtil.newHashMap();
+		}
 		if (ObjectUtil.isNull(iterable)) {
 			return resultMap;
 		}
@@ -505,6 +525,7 @@ public class IterUtil {
 	 * @param <K>       键类型
 	 * @param <V>       值类型
 	 * @return HashMap
+	 * @since 5.3.6
 	 */
 	public static <K, V> Map<K, V> toMap(Iterable<V> iterable, Function<V, K> keyMapper) {
 		return toMap(iterable, keyMapper, v -> v);
@@ -520,10 +541,29 @@ public class IterUtil {
 	 * @param <K>         键类型
 	 * @param <V>         值类型
 	 * @return HashMap
+	 * @since 5.3.6
 	 */
 	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();
+		return toMap(MapUtil.newHashMap(), iterable, keyMapper, valueMapper);
+	}
 
+	/**
+	 * 将列表转成Map
+	 *
+	 * @param resultMap   结果Map,通过传入map对象决定结果的Map类型
+	 * @param iterable    值列表
+	 * @param keyMapper   Map的键映射
+	 * @param valueMapper Map的值映射
+	 * @param <T>         列表值类型
+	 * @param <K>         键类型
+	 * @param <V>         值类型
+	 * @return HashMap
+	 * @since 5.3.6
+	 */
+	public static <T, K, V> Map<K, V> toMap(Map<K, V> resultMap, Iterable<T> iterable, Function<T, K> keyMapper, Function<T, V> valueMapper) {
+		if (null == resultMap) {
+			resultMap = MapUtil.newHashMap();
+		}
 		if (ObjectUtil.isNull(iterable)) {
 			return resultMap;
 		}