Merge pull request #2591 from googoo-s/v5-dev

[新特性]MapUtil增加根据entry分组
This commit is contained in:
Golden Looly 2022-09-04 22:07:09 +08:00 committed by GitHub
commit 3965535a2d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -12,22 +12,8 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.Map.Entry;
import java.util.NavigableMap;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiFunction;
@ -509,6 +495,32 @@ public class MapUtil {
return resultList;
}
/**
* 根据给定的entry列表根据entry的key进行分组;
*
* @param <K> 键类型
* @param <V> 值类型
* @param entries entry列表
* @return entries
*/
public static <K, V> Map<K, List<V>> grouping(Iterable<Map.Entry<K, V>> entries) {
final Map<K, List<V>> map = new HashMap<>(DEFAULT_INITIAL_CAPACITY);
if (CollUtil.isEmpty(entries)) {
return map;
}
for (Map.Entry<K, V> pair : entries) {
if (map.containsKey(pair.getKey())) {
List<V> values = map.get(pair.getKey());
values.add(pair.getValue());
} else {
List<V> values = CollUtil.<V>newArrayList();
values.add(pair.getValue());
map.put(pair.getKey(), values);
}
}
return map;
}
/**
* 将已知Map转换为key为驼峰风格的Map<br>
* 如果KEY为非String类型保留原值