MapUtil
MapUtil是Hutool中用于处理Map的核心工具类,提供了丰富的Map操作方法,包括Map的创建、转换、过滤、排序等功能。
# 主要功能
- Map创建:快速创建各种类型的Map
- Map转换:行转列、列转行、驼峰转换等
- Map过滤:根据条件过滤Map元素
- Map排序:根据键或值排序
- Map合并:合并多个Map
- Map操作:重命名键、移除元素等
- Map遍历:增强型遍历方法
# 方法示例
# 1. Map创建
# newHashMap()
创建一个新的HashMap。
Map<String, Object> map = MapUtil.newHashMap();
map.put("name", "hutool");
map.put("version", "7.0.0");
// 输出: {name=hutool, version=7.0.0}
# of(key, value)
将单一键值对转换为Map。
Map<String, Integer> map = MapUtil.of("key", 123);
// 输出: {key=123}
# ofKvs(isLinked, keysAndValues)
根据键值对数组创建Map。
Map<String, String> colorMap = MapUtil.ofKvs(false,
"RED", "#FF0000",
"GREEN", "#00FF00",
"BLUE", "#0000FF"
);
// 输出: {RED=#FF0000, GREEN=#00FF00, BLUE=#0000FF}
# singleton(key, value)
创建只包含一个键值对的不可变Map。
Map<String, String> singletonMap = MapUtil.singleton("key", "value");
// 输出: {key=value}
# 2. Map判断
# isEmpty(map)
判断Map是否为空。
Map<String, String> map = MapUtil.newHashMap();
boolean isEmpty = MapUtil.isEmpty(map);
// 输出: true
# isNotEmpty(map)
判断Map是否非空。
Map<String, String> map = MapUtil.of("key", "value");
boolean isNotEmpty = MapUtil.isNotEmpty(map);
// 输出: true
# 3. Map转换
# toListMap(mapList)
行转列,合并相同的键,值合并为列表。
List<Map<String, Integer>> mapList = new ArrayList<>();
mapList.add(MapUtil.of("a", 1, "b", 2));
mapList.add(MapUtil.of("a", 3, "b", 4));
mapList.add(MapUtil.of("a", 5));
Map<String, List<Integer>> listMap = MapUtil.toListMap(mapList);
// 输出: {a=[1, 3, 5], b=[2, 4]}
# toMapList(listMap)
列转行,将Map中值列表分别按照其位置与key组成新的map。
Map<String, List<Integer>> listMap = new HashMap<>();
listMap.put("a", ListUtil.of(1, 2, 3));
listMap.put("b", ListUtil.of(4, 5));
List<Map<String, Integer>> mapList = MapUtil.toMapList(listMap);
// 输出: [{a=1, b=4}, {a=2, b=5}, {a=3}]
# toCamelCaseMap(map)
将已知Map转换为key为驼峰风格的Map。
Map<String, String> map = MapUtil.of("user_name", "hutool", "user_age", "18");
Map<String, String> camelCaseMap = MapUtil.toCamelCaseMap(map);
// 输出: {userName=hutool, userAge=18}
# 4. Map过滤
# filter(map, predicate)
根据条件过滤Map元素。
Map<String, Integer> map = MapUtil.of("a", 1, "b", 2, "c", 3, "d", 4);
Map<String, Integer> filteredMap = MapUtil.filter(map, entry -> entry.getValue() > 2);
// 输出: {c=3, d=4}
# removeNullValue(map)
去除Map中值为null的键值对。
Map<String, Object> map = MapUtil.of("a", 1, "b", null, "c", 3);
Map<String, Object> result = MapUtil.removeNullValue(map);
// 输出: {a=1, c=3}
# 5. Map排序
# sort(map)
排序已有Map,Key有序的Map。
Map<String, Integer> map = MapUtil.of("b", 2, "a", 1, "d", 4, "c", 3);
TreeMap<String, Integer> sortedMap = MapUtil.sort(map);
// 输出: {a=1, b=2, c=3, d=4}
# sortByValue(map, isDesc)
按照值排序,可选是否倒序。
Map<String, Integer> map = MapUtil.of("b", 2, "a", 1, "d", 4, "c", 3);
Map<String, Integer> sortedByValueMap = MapUtil.sortByValue(map, true);
// 输出: {d=4, c=3, b=2, a=1}
# 6. Map操作
# renameKey(map, oldKey, newKey)
重命名键。
Map<String, Integer> map = MapUtil.of("oldKey", 123);
Map<String, Integer> result = MapUtil.renameKey(map, "oldKey", "newKey");
// 输出: {newKey=123}
# inverse(map)
Map的键和值互换。
Map<String, Integer> map = MapUtil.of("a", 1, "b", 2);
Map<Integer, String> inverseMap = MapUtil.inverse(map);
// 输出: {1=a, 2=b}
# partition(map, size)
将一个Map按照固定大小拆分成多个子Map。
Map<String, Integer> map = MapUtil.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5);
List<Map<String, Integer>> partitions = MapUtil.partition(map, 2);
// 输出: [{a=1, b=2}, {c=3, d=4}, {e=5}]
# 7. Map遍历
# forEach(map, kvConsumer)
增强型遍历,支持索引。
Map<String, Integer> map = MapUtil.of("a", 1, "b", 2, "c", 3);
MapUtil.forEach(map, (index, key, value) -> {
Console.log(index + ": " + key + "=" + value);
});
// 输出:
// 0: a=1
// 1: b=2
// 2: c=3
# 8. Map构建器
# builder()
创建Map构建器,用于链式创建Map。
Map<String, Object> map = MapUtil.builder()
.put("name", "hutool")
.put("version", "7.0.0")
.put("author", "looly")
.build();
// 输出: {name=hutool, version=7.0.0, author=looly}
# 注意事项
线程安全:MapUtil中的方法本身是线程安全的,但返回的Map对象(如HashMap)默认不是线程安全的。如果需要线程安全的Map,请使用
Collections.synchronizedMap()或ConcurrentHashMap。空指针处理:大部分方法都会处理null值,不会抛出NullPointerException,但仍需注意传入null参数的情况。
性能考虑:对于大型Map,某些操作(如排序、过滤)可能会消耗较多资源,建议根据实际情况选择合适的方法。
不可变Map:使用
singleton()、empty()等方法创建的Map是不可变的,尝试修改会抛出UnsupportedOperationException。
# 总结
MapUtil提供了丰富的Map操作方法,大大简化了Java中Map的使用。无论是简单的Map创建,还是复杂的Map转换、过滤、排序,MapUtil都能提供简洁高效的解决方案。通过使用MapUtil,可以减少大量重复代码,提高开发效率。
← 简介 MapBuilder→