当前位置: 首页 > news >正文

MapUtils常用方法

1、摘要

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

2、前言

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

3、配置方法

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

  1. 下载Apache Commons Lang库,并将其添加到你的项目中。
  2. 使用构建工具如MavenGradle,在项目的依赖中添加Apache Commons Lang库。
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.1</version>
</dependency>

4、方法

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

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

将结果转换为String,如果转换失败则使用默认值

5、常用方法

5.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);}
}

5.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);}
}

5.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);}
}

5.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);}
}

5.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);}
}

5.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);}
}

5.7、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);}
}

5.8、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 UnsupportedOperationExceptionunmodifiableMap.put("key2", "value2");}
}

5.9、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 UnsupportedOperationExceptionunmodifiableMap.put("key2", "value2");}
}

5.10、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}
}

5.11、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);}
}

5.12、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);}
}

5.13、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);}
}

5.14、 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 accessedString value = lazyMap.get("key");System.out.println("Lazy Map Value: " + value);}
}
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和一个包含一些键值对的MapMap<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"键对应的布尔值,应返回trueAssert.assertTrue(MapUtils.getBoolean(map, "boolean"));// 预期:从Map中获取"user"键对应的布尔值,但转换失败,应返回默认值falseAssert.assertFalse(MapUtils.getBoolean(map, "user", false));// 预期:目标map为null,无法获取值,应返回nullAssert.assertNull(MapUtils.getBoolean(nullMap, "boolean"));// 预期:目标map为null,无法获取值,应返回默认值falseAssert.assertFalse(MapUtils.getBoolean(nullMap, "boolean", false));// 使用MapUtils.getBooleanValue// 预期:从Map中获取"boolean"键对应的布尔值,应返回trueAssert.assertTrue(MapUtils.getBooleanValue(map, "boolean"));// 预期:从Map中获取"user"键对应的布尔值,但转换失败,应返回默认值falseAssert.assertFalse(MapUtils.getBooleanValue(map, "user", false));// 预期:目标map为null,无法获取值,应返回falseAssert.assertFalse(MapUtils.getBooleanValue(nullMap, "boolean"));// 预期:目标map为null,无法获取值,应返回默认值falseAssert.assertFalse(MapUtils.getBooleanValue(nullMap, "boolean", false));// 使用MapUtils.getInteger// 预期:从Map中获取"integer"键对应的整数值,应返回Integer类型的值5Assert.assertEquals(Integer.valueOf(5), MapUtils.getInteger(map, "integer"));// 预期:从Map中获取"integer"键对应的整数值,但转换失败,应返回默认值5Assert.assertEquals(Integer.valueOf(5), MapUtils.getInteger(map, "integer", 5));// 预期:目标map为null,无法获取值,应返回nullAssert.assertNull(MapUtils.getInteger(nullMap, "integer"));// 预期:目标map为null,无法获取值,应返回默认值5Assert.assertEquals(Integer.valueOf(5), MapUtils.getInteger(nullMap, "integer", 5));// 使用MapUtils.getIntValue// 预期:从Map中获取"integer"键对应的整数值,应返回int类型的值5Assert.assertEquals(5, MapUtils.getIntValue(map, "integer"));// 预期:从Map中获取"user"键对应的整数值,但转换失败,应返回默认值5Assert.assertEquals(5, MapUtils.getIntValue(map, "user", 5));// 预期:目标map为null,无法获取值,应返回0(int的默认值)Assert.assertEquals(0, MapUtils.getIntValue(nullMap, "integer"));// 预期:目标map为null,无法获取值,应返回默认值5Assert.assertEquals(5, MapUtils.getIntValue(nullMap, "integer", 5));}// 一个示例的用户类,用于模拟Map中的对象static class User {// 你可以在这里添加用户属性和行为}
}

相关文章:

MapUtils常用方法

1、摘要 MapUtils是一个用于处理Map对象的实用工具类&#xff0c;它提供了许多方便的方法来执行常见的操作&#xff0c;如获取值、设置默认值、合并Map等。本文将介绍MapUtils的常见用法&#xff0c;以帮助你更轻松地处理Map数据。 2、前言 在Java编程中&#xff0c;Map是一…...

自定义PasswordEditText控件,在手机字体应用后,字体样式未发生改变

原来的输入类型inputType为textPassword&#xff0c;现在将 inputType删掉即可...

学习打卡第31天

...

opencascade AIS_TexturedShape源码学习 贴纹理

opencascade AIS_TexturedShape opencascade 贴纹理 前言 //! 该类允许在形状上映射纹理。 //! 显示模式 AIS_WireFrame (0) 和 AIS_Shaded (1) 的行为与 AIS_Shape 中的行为相同&#xff0c; //! 而新模式 2 (包围盒) 和 3 (纹理映射) 扩展了其功能。 //! //! 纹理本身在 (0…...

C# winform 串口读取字节流,MB级别字节流

一、串口读取字节流 在 C# 中使用 Windows Forms (WinForms) 应用程序进行串口通信时&#xff0c;通常会使用 System.IO.Ports 命名空间中的 SerialPort 类。以下是一个简单的示例&#xff0c;展示了如何设置一个串口并读取字节流。 步骤 1: 添加引用 确保你的项目中已经包含…...

创建一个简单的单链表

1.头文件的Slist.h的代码 #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> typedef int SListint; typedef struct Slist//单链表 {SListint data;struct Slist* next; }SL;//尾插 void SlistPushBank(SL*…...

15.1 Zookeeper简介安装及基础使用

1. Zookeeper介绍 1.1 介绍 1.2 应用场景简介 1.3 zookeeper工作原理 1.4 zookeeper特点...

详细说明Java中Map和Set接口的使用方法

Map与Set的基本概念与场景 Map和set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有&#xff1a; 1. 直接遍历&#xff0c;时间复杂度为O(N)&#xff0c;元素如果比较多效率会非常慢。 2. 二分查找&#x…...

CSS3 scale 适配

Scale适配&#xff0c;在前端开发中&#xff0c;特别是在CSS3中&#xff0c;主要指的是使用scale()函数对元素进行缩放处理&#xff0c;以适应不同的屏幕尺寸或达到特定的视觉效果。以下是对Scale适配的详细介绍&#xff1a; 一、基本概念 scale() 是CSS3中transform属性的一…...

SX_初识GitLab_1

1、对GitLab的理解&#xff1a; 目前对GitLab的理解是其本质是一个远程代码托管平台&#xff0c;上面托管多个项目&#xff0c;每个项目都有一个master主分支和若干其他分支&#xff0c;远程代码能下载到本机&#xff0c;本机代码也能上传到远程平台 1.分支的作用&#xff1a…...

这才是 PHP 高性能框架 Workerman 的立命之本

大家好&#xff0c;我是码农先森。 在这个大家都崇尚高性能的时代&#xff0c;程序员的谈笑间句句都离不开高性能&#xff0c;仿佛嘴角边不挂着「高性能」三个字都会显得自己很 Low&#xff0c;其中众所皆知的 Nginx 就是高性能的代表。有些朋友可能连什么是高性能都不一定理解…...

Python——记录pip问题(解决下载慢、升级失败问题)

在python开发中&#xff0c;经常需要使用到各种各样的库。 pip又是我们常用的安装工具。但是国外的源下载速度实在太慢&#xff0c;经常导致超时。 有很多朋友刚刚学Python的时候&#xff0c;会来问为什么pip下载东西这么慢啊&#xff1f; 而且pycharm里面下载库也是非常的慢…...

Windows Server 2025 Preview 部署 Ⅰ—— ISO下载和硬件要求

目录 1. 预览版下载2. Windows 服务器的硬件要求2.1安装 Windows Server 2025 虚拟机注意事项2.2 CPU2.3 RAM / Memory2.4 存储 Storage2.5 网络 Network2.6 其他需求 1. 预览版下载 下载网站&#xff1a;https://www.microsoft.com/en-in/evalcenter/download-windows-server…...

AI2-CUDA、CuDNN、TensorRT的详细安装教程

一、查看本机的显卡 首先你要看你的电脑是否有NVIDIA的独立显卡&#xff0c;你可以在设备管理器-显示适配器中查看 点击“开始”--找到“NVIDA Control Panel” 点击帮助--系统信息--组件&#xff0c;查看NVCUDA.DLL对应的产品名称&#xff0c;就可以看住CUDA的版本号 这里的版…...

TCP连接中重复使用了两个相同的端口怎么办

1.检查并避免重复配置&#xff1a; 首先&#xff0c;应该检查系统的配置和应用程序的设置&#xff0c;确保没有错误地将多个服务或进程配置为使用相同的端口号。 使用网络监控工具&#xff08;如netstat、ss等&#xff09;来查看当前哪些端口正在被使用。 2.使用端口复用选项…...

如何自定义异常

目录 为什么自定义异常自定义异常的步骤参考资料 为什么自定义异常 自定义异常是指开发者根据应用程序的需求和逻辑&#xff0c;自行定义的异常类。与 Java 提供的标准异常类&#xff08;如 NullPointerException、IOException 等&#xff09;不同&#xff0c;自定义异常允许程…...

C++中的依赖注入

目录 1.概述 2.构造函数注入 3.setter方法注入 4.接口注入 5.依赖注入框架 6.依赖注入容器 7.依赖注入框架的工作原理 8.依赖注入的优势 9.总结 1.概述 依赖注入是一种设计模式&#xff0c;它允许我们在不直接创建对象的情况下为对象提供其依赖项&#xff1b;它通过将…...

CSS平面转换-平移

平面转换-平移 属性 transform: translate(X轴移动距离, Y轴移动距离); 取值 像素单位取值百分比&#xff08;参照盒子自身尺寸计算结果&#xff09;正负均可 技巧translate()只写一个值表示只沿着X轴移动单独设置X或Y轴距离&#xff1a;translateX()或translateY() 代码 …...

Linux-3:Shell编程——基础语法(0-50%)

目录 前言 一、变量 1.定义变量 2.使用变量 3.修改变量 4.将命令的结果赋值给变量 5.只读变量 6.删除变量 二、传递参数 三、字符串 1.字符串举例 2.统计字符串长度 3.字符串拼接 4.截取字符串 总结 前言 Shell是一种程序设计语言。作为命令语言&#xff0c;它…...

C++ --> string类模拟实现(附源码)

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前言&#xff1a; C中STL扮演着极其重要的角色&#xff0c;学习C重中之重的就是学习STL&#xff0c;虽然string不作为containers的其中一员&#xff0c;但是也是值得学习的le类。下面就进行string的模拟实现 string的模拟…...

植物大战僵尸杂交版下载2026最新版更新v3.16及版本介绍分享(附下载链接)

作为一名长期沉迷植物大战僵尸改版的玩家&#xff0c;我近期完整体验了杂交版全新V3.16版本&#xff0c;从植物、关卡到平台适配&#xff0c;逐一实测验证。整体而言&#xff0c;这是一次诚意满满的更新&#xff0c;既有新鲜玩法的创新&#xff0c;又兼顾了不同玩家的需求&…...

红米AX3000路由器SSH完整解锁终极指南:3步获取root权限

红米AX3000路由器SSH完整解锁终极指南&#xff1a;3步获取root权限 【免费下载链接】unlock-redmi-ax3000 Scripts for getting Redmi AX3000 (aka. AX6) SSH access. 项目地址: https://gitcode.com/gh_mirrors/un/unlock-redmi-ax3000 想要完全掌控你的红米AX3000路由…...

WPF中OxyPlot不同图表的使用

在 WPF 中使用 OxyPlot 实现不同图表&#xff0c;核心在于创建和配置PlotModel对象&#xff0c;并将其绑定到PlotView控件上进行显示。通过向PlotModel中添加不同类型的Series&#xff08;数据系列&#xff09;&#xff0c;即可轻松实现折线图、柱状图、饼图、散点图等多种图表…...

怎样3步掌握桌面自动化:智能鼠标键盘录制工具完整攻略

怎样3步掌握桌面自动化&#xff1a;智能鼠标键盘录制工具完整攻略 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo Keymouse…...

雨夜便利店的光,刚好够照亮你这一秒的疲惫

雨声比闹钟更懂你凌晨一点十七分&#xff0c;耳机里循环着一首没名字的 lo-fi beat&#xff0c;窗外的雨没停&#xff0c;也没下大&#xff0c;就那么轻轻敲着空调外机和生锈的铁皮棚。你站在楼道口犹豫要不要出门买泡面&#xff0c;其实不是饿&#xff0c;是心里空了一小块&am…...

半导体行业数据分析:从WSTS报告解读市场趋势与从业者应对策略

1. 从一份行业快报说起&#xff1a;如何解读半导体市场的“水温”早上刚冲好咖啡&#xff0c;习惯性地扫了一眼行业新闻&#xff0c;看到EE Times上这篇关于2013年第一季度全球半导体销售额的简报。标题很直接&#xff1a;“Chip sales up 1% through Q1”。1%的增长&#xff0…...

如何快速配置ComfyUI ControlNet预处理器:完整安装与使用指南

如何快速配置ComfyUI ControlNet预处理器&#xff1a;完整安装与使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux ComfyUI ControlNet Aux预处理器…...

Foundation Sites响应式设计原理:5个核心断点系统详解,打造完美移动优先体验

Foundation Sites响应式设计原理&#xff1a;5个核心断点系统详解&#xff0c;打造完美移动优先体验 【免费下载链接】foundation-sites The most advanced responsive front-end framework in the world. Quickly create prototypes and production code for sites that work …...

观察Taotoken Token Plan套餐在长期项目中的成本控制效果

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken Token Plan套餐在长期项目中的成本控制效果 对于需要长期、稳定调用大模型API的项目而言&#xff0c;成本的可预测性…...

Sonos语音控制功能大揭秘:常用指令、局限与第三方助手对比

ZDNET核心要点Sonos音箱内置语音助手&#xff0c;其语音控制虽不如其他助手智能&#xff0c;但并非一无是处&#xff0c;每日闹钟、天气预报和定时器能提升使用体验。Sonos语音控制使用体验并非智能家居爱好者&#xff0c;但家里有好几台Sonos智能音箱。虽不太喜欢自动语音助手…...