Java里如何过滤掉Map中的null值

来源:APP编程网作者:香港程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《Java里如何过滤掉Map中的null值》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Java里如何过滤掉Map中的null值》有用,将其分享出去将是对创作者最好的鼓励。

在Java开发中,Map是常用的数据结构之一,实际业务里经常会遇到Map中存在null值的情况,这些null值可能会在后续的数据处理、序列化、接口返回等环节引发异常,因此需要对Map进行清洗,过滤掉其中的null值。

Java里如何过滤掉Map中的null值

基础循环遍历过滤方式

最传统的过滤方式是遍历Map的entrySet,判断value是否为null,将非null的键值对放入新的Map中。这种方式兼容性好,适用于所有Java版本。

import java.util.HashMap;
import java.util.Map;

public class MapNullFilterDemo {
    public static void main(String[] args) {
        // 初始化包含null值的Map
        Map<String, Object> originalMap = new HashMap<>();
        originalMap.put("name", "张三");
        originalMap.put("age", null);
        originalMap.put("score", 90);
        originalMap.put("address", null);

        // 创建新Map存储过滤后的结果
        Map<String, Object> filteredMap = new HashMap<>();
        // 遍历原Map的entrySet
        for (Map.Entry<String, Object> entry : originalMap.entrySet()) {
            // 判断value不为null时放入新Map
            if (entry.getValue() != null) {
                filteredMap.put(entry.getKey(), entry.getValue());
            }
        }

        System.out.println("过滤前的Map:" + originalMap);
        System.out.println("过滤后的Map:" + filteredMap);
    }
}

使用Java 8 Stream流过滤

Java 8及以上版本可以使用Stream流的方式简化过滤逻辑,代码更简洁,可读性更强。

import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class MapStreamFilterDemo {
    public static void main(String[] args) {
        Map<String, Object> originalMap = new HashMap<>();
        originalMap.put("name", "李四");
        originalMap.put("age", null);
        originalMap.put("score", 85);
        originalMap.put("address", null);

        // 使用Stream过滤value不为null的entry
        Map<String, Object> filteredMap = originalMap.entrySet()
                .stream()
                // 过滤条件:value不为null
                .filter(entry -> entry.getValue() != null)
                // 收集到新的Map中
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        Map.Entry::getValue
                ));

        System.out.println("过滤前的Map:" + originalMap);
        System.out.println("过滤后的Map:" + filteredMap);
    }
}

使用Apache Commons Lang工具类过滤

如果项目中已经引入了Apache Commons Lang依赖,可以使用MapUtils相关的方法简化操作,减少重复代码。

import org.apache.commons.lang3.MapUtils;
import java.util.HashMap;
import java.util.Map;

public class MapCommonsFilterDemo {
    public static void main(String[] args) {
        Map<String, Object> originalMap = new HashMap<>();
        originalMap.put("name", "王五");
        originalMap.put("age", null);
        originalMap.put("score", 88);
        originalMap.put("address", null);

        // 使用MapUtils的predicate方法过滤null值
        Map<String, Object> filteredMap = MapUtils.filterEntries(originalMap,
                entry -> entry.getValue() != null
        );

        System.out.println("过滤前的Map:" + originalMap);
        System.out.println("过滤后的Map:" + filteredMap);
    }
}

不同过滤策略的对比

不同的过滤方式有不同的适用场景,下面是几种方式的对比:

过滤方式适用Java版本代码简洁度性能表现适用场景
基础循环遍历所有版本一般较好低版本Java项目,或者需要兼容旧环境的场景
Stream流过滤Java 8及以上略低于循环遍历Java 8以上项目,追求代码简洁的场景
第三方工具类过滤所有版本(需引入依赖)依赖工具类实现项目已经引入对应工具库,减少自定义代码的场景

注意事项

  • 以上过滤方式都会生成新的Map,不会修改原有的Map对象,如果需要修改原Map,需要先清空原Map再重新放入过滤后的数据,或者使用迭代器遍历删除。
  • 如果Map的key也可能为null,需要额外增加key的非null判断,避免后续逻辑出现问题。
  • Stream流过滤时如果原Map为空,不会抛出异常,会返回空的Map,无需额外做空判断。
实际开发中可以根据项目的Java版本、依赖情况以及具体的业务需求选择最合适的Map null值过滤方式,保证代码的健壮性和可读性。

JavaMapnull过滤Map清洗修改时间:2026-06-17 17:15:40

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。