• MapUtils常用方法


    在这里插入图片描述

    博主 默语带您 Go to New World.
    个人主页—— 默语 的博客👦🏻
    《java 面试题大全》
    🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
    《MYSQL从入门到精通》数据库是开发者必会基础之一~
    🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨

    在这里插入图片描述

    🍓摘要

    MapUtils是一个用于处理Map对象的实用工具类,它提供了许多方便的方法来执行常见的操作,如获取值、设置默认值、合并Map等。本文将介绍MapUtils的常见用法,以帮助你更轻松地处理Map数据。

    🍓引言

    Java编程中,Map是一种常用的数据结构,用于存储键值对。然而,处理Map数据时,经常需要进行一些繁琐的操作,例如检查键是否存在,获取键对应的值,或者在键不存在时设置默认值。为了简化这些任务,Apache Commons Lang库提供了一个实用工具类MapUtils

    🍓配置方法

    要使用MapUtils,首先需要导入Apache Commons Lang库。你可以通过以下方式配置你的Java项目来使用MapUtils:

    1. 下载Apache Commons Lang库,并将其添加到你的项目中。
    2. 使用构建工具如MavenGradle,在项目的依赖中添加Apache Commons Lang库。

    下面是一个使用Maven的示例配置:

    <dependency>
        <groupId>org.apache.commonsgroupId>
        <artifactId>commons-collections4artifactId>
        <version>4.1version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    🍓方法

    可以从指定map中获取常用基础类型的值,都会判断map,map为null返回null,get结果为null返回null

    修饰符和返回类型方法描述
    static BooleangetBoolean(Map map, K key)从Map获取Boolean
    static BooleangetBoolean(Map map, K key, Boolean defaultValue)将结果转换为Boolean,如果转换失败则使用默认值
    static booleangetBooleanValue(Map map, K key)从Map获取boolean。
    static booleangetBooleanValue(Map map, K key, boolean defaultValue)如果转换失败,则使用默认值
    static DoublegetDouble(Map map, K key)从Map获取Double
    static DoublegetDouble(Map map, K key, Double defaultValue)将结果转换为Double,如果转换失败则使用默认值
    static doublegetDoubleValue(Map map, K key)从Map获取double
    static doublegetDoubleValue(Map map, K key, double defaultValue)如果转换失败,则使用默认值
    static FloatgetFloat(Map map, K key)从Map获取Float
    static FloatgetFloat(Map map, K key, Float defaultValue)将结果转换为Float,如果转换失败则使用默认值
    static floatgetFloatValue(Map map, K key)从Map获取float
    static floatgetFloatValue(Map map, K key, float defaultValue)如果转换失败,则使用默认值
    static IntegergetInteger(Map map, K key)从Map获取Integer
    static IntegergetInteger(Map map, K key, Integer defaultValue)将结果转换为Integer,如果转换失败则使用默认值
    static intgetIntegerValue(Map map, K key)从Map获取int
    static intgetIntegerValue(Map map, K key, int defaultValue)如果转换失败,则使用默认值
    static LonggetLong(Map map, K key)从Map获取Long
    static LonggetLong(Map map, K key, Long defaultValue)将结果转换为Long,如果转换失败则使用默认值
    static longgetLongValue(Map map, K key)从Map获取long
    static longgetLongValue(Map map, K key, long defaultValue)如果转换失败,则使用默认值
    static StringgetString(Map map, K key)从Map获取String
    static StringgetString(Map map, K key, String defaultValue)将结果转换为String,如果转换失败则使用默认值

    此外还可以获取Number、Short、Byte等类型值


    💝常用方法

    🌹1. isNotEmpty(): 是否不为空

    注释说明: 用于检查Map是否不为空,即包含至少一个键值对。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, String> map = new HashMap<>();
            map.put("key1", "value1");
            
            boolean isNotEmpty = MapUtils.isNotEmpty(map);
            System.out.println("Map is not empty: " + isNotEmpty);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    🌹2. isEmpty(): 是否为空

    注释说明: 用于检查Map是否为空,即不包含任何键值对。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, String> map = new HashMap<>();
            
            boolean isEmpty = MapUtils.isEmpty(map);
            System.out.println("Map is empty: " + isEmpty);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    🌹3. putAll(): 添加所有元素

    注释说明: 将另一个Map的所有键值对添加到目标Map中。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, String> sourceMap = new HashMap<>();
            sourceMap.put("key1", "value1");
            sourceMap.put("key2", "value2");
            
            Map<String, String> targetMap = new HashMap<>();
            MapUtils.putAll(targetMap, sourceMap);
            
            System.out.println("Target Map: " + targetMap);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    🌹4. getString(): 获取String类型的值

    注释说明: 从Map中获取String类型的值,可以指定默认值。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, Object> map = new HashMap<>();
            map.put("name", "John");
            
            String value = MapUtils.getString(map, "name", "Unknown");
            System.out.println("Name: " + value);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    🌹5. getObject(): 获取Object类型的值

    注释说明: 从Map中获取Object类型的值,可以指定默认值。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, Object> map = new HashMap<>();
            map.put("age", 30);
            
            Object value = MapUtils.getObject(map, "age", null);
            System.out.println("Age: " + value);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    🌹6. getInteger(): 获取Integer类型的值

    注释说明: 从Map中获取Integer类型的值,可以指定默认值。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, Object> map = new HashMap<>();
            map.put("count", 42);
            
            Integer value = MapUtils.getInteger(map, "count", 0);
            System.out.println("Count: " + value);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    🌹7. get***(): 类似上面的方法

    可以使用类似的方法来获取不同类型的值,如getLong(), getDouble(), getBoolean(), 等等。

    🌹8. EMPTY_MAP: 获取一个不可修改的空类型Map

    注释说明: 获取一个不可修改的空Map,通常用于表示空数据。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, String> emptyMap = MapUtils.EMPTY_MAP;
            System.out.println("Empty Map: " + emptyMap);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    🌹9. unmodifiableMap: 获取一个不可修改的Map

    注释说明: 获取一个不可修改的Map,不能新增或删除键值对。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, String> mutableMap = new HashMap<>();
            mutableMap.put("key1", "value1");
            
            Map<String, String> unmodifiableMap = MapUtils.unmodifiableMap(mutableMap);
            // This will throw an UnsupportedOperationException
            unmodifiableMap.put("key2", "value2");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    🌹10. unmodifiableSortedMap: 获取一个不可修改的有序的Map

    注释说明: 获取一个不可修改的有序Map,同样不能新增或删除键值对。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.TreeMap;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, String> mutableMap = new TreeMap<>();
            mutableMap.put("key1", "value1");
            
            Map<String, String> unmodifiableMap = MapUtils.unmodifiableSortedMap(mutableMap);
            // This will throw an UnsupportedOperationException
            unmodifiableMap.put("key2", "value2");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    🌹11. fixedSizeMap: 获取一个固定长度的Map

    注释说明: 获取一个固定长度的Map,不能新增或删除键值对,也不能修改已存在的键值对数量。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    import java.util.Map;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, String> fixedSizeMap = MapUtils.fixedSizeMap(new HashMap<>());
            fixedSizeMap.put("key1", "value1"); // This will throw an UnsupportedOperationException
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    🌹12. multiValueMap: 获取一个多值的Map

    注释说明: 获取一个多值的Map,即一个键可以对应多个值。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    import org.apache.commons.collections4.MultiMap;
    import org.apache.commons.collections4.map.MultiValueMap;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            MultiMap<String, String> multiValueMap = new MultiValueMap<>();
            multiValueMap.put("key1", "value1");
            multiValueMap.put("key1", "value2");
            
            System.out.println("Multi-Value Map: " + multiValueMap);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    🌹13. invertMap: 返回一个键值对调的Map

    注释说明: 返回一个新的Map,其中键和值互换。

    示例代码:

    import org.apache.commons.lang3.MapUtils;
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, Integer> originalMap = new HashMap<>();
            originalMap.put("one", 1);
            originalMap.put("two", 2);
            
            Map<Integer, String> invertedMap = MapUtils.invertMap(originalMap);
            System.out.println("Inverted Map: " + invertedMap);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    🌹14. predicatedMap(): 返回一个满足predicate条件的Map

    注释说明: 返回一个新的Map,其中的键值对满足指定条件。

    示例代码:

    import org.apache.commons.collections4.Predicate;
    import org.apache.commons.collections4.map.PredicatedMap;
    import org.apache.commons.lang3.MapUtils;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Map<String, Integer> originalMap = new HashMap<>();
            originalMap.put("one", 1);
            originalMap.put("two", 2);
            
            Predicate<String> keyPredicate = key -> key.startsWith("t");
            
            Map<String, Integer> predicatedMap = MapUtils.predicatedMap(originalMap, keyPredicate, null);
            System.out.println("Predicated Map: " + predicatedMap);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    🌹15. lazyMap: 返回一个lazy的Map

    注释说明: 返回一个延迟加载的Map,在需要时才创建值。

    示例代码:

    import org.apache.commons.collections4.Factory;
    import org.apache.commons.collections4.map.LazyMap;
    import org.apache.commons.lang3.MapUtils;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapUtilsDemo {
        public static void main(String[] args) {
            Factory<String> valueFactory = () -> "Lazy Value";
            Map<String, String> lazyMap = LazyMap.lazyMap(new HashMap<>(), valueFactory);
            
            // Lazy value is only created when accessed
            String value = lazyMap.get("key");
            
            System.out.println("Lazy Map Value: " + value);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    以上是关于Apache Commons Lang库中MapUtils类的常用方法的注释说明和示例代码。这些方法可以帮助你更轻松地处理和操作Java中的Map对象。

    🔮实列

    import org.apache.commons.lang3.MapUtils;
    import org.junit.Assert;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapUtilsDemo {
    
        public static void main(String[] args) {
            // 定义一个空的Map和一个包含一些键值对的Map
            Map<String, Object> nullMap = null;
            Map<String, Object> map = new HashMap<>();
            map.put("user", new User());
            map.put("boolean", true);
            map.put("integer", 5);
    
            // 使用MapUtils.getBoolean
            // 预期:从Map中获取"boolean"键对应的布尔值,应返回true
            Assert.assertTrue(MapUtils.getBoolean(map, "boolean"));
            // 预期:从Map中获取"user"键对应的布尔值,但转换失败,应返回默认值false
            Assert.assertFalse(MapUtils.getBoolean(map, "user", false));
            // 预期:目标map为null,无法获取值,应返回null
            Assert.assertNull(MapUtils.getBoolean(nullMap, "boolean"));
            // 预期:目标map为null,无法获取值,应返回默认值false
            Assert.assertFalse(MapUtils.getBoolean(nullMap, "boolean", false));
    
            // 使用MapUtils.getBooleanValue
            // 预期:从Map中获取"boolean"键对应的布尔值,应返回true
            Assert.assertTrue(MapUtils.getBooleanValue(map, "boolean"));
            // 预期:从Map中获取"user"键对应的布尔值,但转换失败,应返回默认值false
            Assert.assertFalse(MapUtils.getBooleanValue(map, "user", false));
            // 预期:目标map为null,无法获取值,应返回false
            Assert.assertFalse(MapUtils.getBooleanValue(nullMap, "boolean"));
            // 预期:目标map为null,无法获取值,应返回默认值false
            Assert.assertFalse(MapUtils.getBooleanValue(nullMap, "boolean", false));
    
            // 使用MapUtils.getInteger
            // 预期:从Map中获取"integer"键对应的整数值,应返回Integer类型的值5
            Assert.assertEquals(Integer.valueOf(5), MapUtils.getInteger(map, "integer"));
            // 预期:从Map中获取"integer"键对应的整数值,但转换失败,应返回默认值5
            Assert.assertEquals(Integer.valueOf(5), MapUtils.getInteger(map, "integer", 5));
            // 预期:目标map为null,无法获取值,应返回null
            Assert.assertNull(MapUtils.getInteger(nullMap, "integer"));
            // 预期:目标map为null,无法获取值,应返回默认值5
            Assert.assertEquals(Integer.valueOf(5), MapUtils.getInteger(nullMap, "integer", 5));
    
            // 使用MapUtils.getIntValue
            // 预期:从Map中获取"integer"键对应的整数值,应返回int类型的值5
            Assert.assertEquals(5, MapUtils.getIntValue(map, "integer"));
            // 预期:从Map中获取"user"键对应的整数值,但转换失败,应返回默认值5
            Assert.assertEquals(5, MapUtils.getIntValue(map, "user", 5));
            // 预期:目标map为null,无法获取值,应返回0(int的默认值)
            Assert.assertEquals(0, MapUtils.getIntValue(nullMap, "integer"));
            // 预期:目标map为null,无法获取值,应返回默认值5
            Assert.assertEquals(5, MapUtils.getIntValue(nullMap, "integer", 5));
        }
    
        // 一个示例的用户类,用于模拟Map中的对象
        static class User {
            // 你可以在这里添加用户属性和行为
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    💎总结

    1. 处理Map中的数据:MapUtils的主要目标是处理和操作Map中的数据。它提供了一组方法,涵盖了各种常见的需求,包括获取、修改、转换和合并Map中的数据。这些方法帮助开发人员在不必编写大量重复代码的情况下完成常见的Map操作。
    2. 类型安全的值获取:MapUtils的一个强大特点是它允许你从Map中获取不同类型的值,并提供了默认值选项。这对于处理各种数据类型,包括布尔值、整数、字符串等,非常有用。例如,你可以从Map中获取一个整数值,并在转换失败或键不存在时指定一个默认值。
    3. 创建不可修改的Map:MapUtils还支持创建不可修改的Map。这些不可修改的Map可以帮助你确保Map中的数据不被意外更改,从而提高代码的可靠性。不可修改的Map可以包括普通的Map,也可以是有序的Map,具体取决于你的需求。
    4. 多值Map支持:通过整合Apache Commons Collections库,MapUtils支持多值Map。多值Map允许一个键关联多个值,这在某些场景下非常有用,例如处理多选框选项或分组数据。
    5. 懒加载Map:MapUtils可以创建懒加载的Map,这意味着值只有在需要时才会被计算或创建。这种延迟加载的机制对于处理大量数据或需要复杂计算的情况非常有帮助,可以提高性能和效率。
    6. 适用于测试和验证:MapUtils的方法非常适合用于编写测试用例。你可以轻松地创建和操作Map,以验证代码中的数据处理逻辑。这有助于确保代码的正确性和稳定性。
    7. 提高代码可读性和可维护性:MapUtils不仅简化了Map操作,还提高了代码的可读性和可维护性。通过使用MapUtils的方法,你可以更清晰地表达你的意图,减少了冗长的代码,使代码更易于理解和维护。

    总之,MapUtils是一个强大的工具类,为处理Map数据提供了丰富的功能和便捷的方法。它有助于提高开发效率,减少代码重复,同时增强了代码的可靠性和可维护性。在Java项目中,特别是涉及大量Map操作的情况下,MapUtils是一个不可或缺的工具库。

    🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

    如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )

    点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

    在这里插入图片描述

  • 相关阅读:
    电路原理解题笔记(一)
    易点易动设备管理系统:打通采购管理的智能化设备管理解决方案
    mapreduce综合应用案例 — 招聘数据清洗
    Makefile 学习二:命令和变量
    设计模式 简单工厂模式的进化过程
    【C++泛型学习笔记】函数模板
    数字IC前端学习笔记:时钟切换电路
    MySQL之索引初识篇:索引机制、索引分类、索引使用与管理综述
    GBase 8a事务控制
    从C语言到C++_37(特殊类设计和C++类型转换)单例模式
  • 原文地址:https://blog.csdn.net/qq_42055933/article/details/132734827