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

[Java基础] stream流中Collectors.toMap报空指针异常情况

代码示例:

        List<BookEntity> bookEntityList = new ArrayList<>();BookEntity bookEntity = BookEntity.builder().bookName("钢铁是怎样炼成的").bookOwner("xinliushijian").build();BookEntity bookEntity1 = BookEntity.builder().bookName("悲惨世界").bookOwner("xinliu").build();bookEntityList.add(bookEntity);bookEntityList.add(bookEntity1);BookEntity bookEntity2 = BookEntity.builder().bookName(null).bookOwner("shijian1").build();BookEntity bookEntity3 = BookEntity.builder().bookName(null).bookOwner("shijian2").build();bookEntityList.add(bookEntity2);bookEntityList.add(bookEntity3);// key中有null,不报错Map<String, String> map = bookEntityList.stream().collect(Collectors.toMap(BookEntity::getBookName, BookEntity::getBookOwner, (v1, v2)  -> v2));System.out.println(map); // 打印1BookEntity bookEntity4 = BookEntity.builder().bookName("笑面人").bookOwner(null).build();bookEntityList.add(bookEntity4);// value中有null,报空指针异常Map<String, String> map1 = bookEntityList.stream().collect(Collectors.toMap(BookEntity::getBookName, BookEntity::getBookOwner, (v1, v2)  -> v2));System.out.println(map1); // 打印2

打印1:

{null=shijian2, 悲惨世界=xinliu, 钢铁是怎样炼成的=xinliushijian}

打印2:

Exception in thread “main” java.lang.NullPointerException
at java.util.HashMap.merge(HashMap.java:1225)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps 3 R e d u c i n g S i n k . a c c e p t ( R e d u c e O p s . j a v a : 169 ) a t j a v a . u t i l . A r r a y L i s t 3ReducingSink.accept(ReduceOps.java:169) at java.util.ArrayList 3ReducingSink.accept(ReduceOps.java:169)atjava.util.ArrayListArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)

报错原因:
并不是因为map不允许value值为null,我们都知道map中key和value都可以为null,而是merge方法中value不允许为null

在这里插入图片描述

解决办法:
所以在进行map转换之前,若无法保证数据非空,还是需要过滤下数据,只保留非空的部分数据(key为null一般无意义,也不要了)

	// 正确写法Map<String, String> map2 = bookEntityList.stream().filter(v -> !StringUtils.isAnyBlank(v.getBookName(), v.getBookOwner())).collect(Collectors.toMap(BookEntity::getBookName, BookEntity::getBookOwner, (v1, v2)  -> v2));System.out.println(map2); // 打印3

打印3:

{悲惨世界=xinliu, 钢铁是怎样炼成的=xinliushijian}

http://www.xdnf.cn/news/13110.html

相关文章:

  • CppCon 2015 学习:Time Programming Fundamentals
  • Shooter–System Performance Variability as a Function of Recoil Dynamics
  • 一般视频剪辑的硬盘配置是什么
  • AUTOSAR图解==>AUTOSAR_AP_RS_General
  • 卷积核、FIR滤波器与LTI系统——一回事
  • 高斯列主元消去法——python实现
  • Android Jetpack 系列(三) Lifecycle 生命周期感知组件详解
  • cacert.pem根证书文件
  • PydanticAI 作为 MCP 客户端示例
  • RK3568/RK3588 KVM系统虚拟化解决方案
  • WPS2024 软件下载及安装教程!
  • 关于纯java代码项目,打包jar实现方式
  • Python 训练营打卡 Day 47
  • 免布线+双向通信——电力载波技术重塑楼宇自控能效管理
  • 自建CA并生成自签名SSL证书
  • Cell的复用及自定义Cell
  • STM32嵌套向量中断控制器(NVIC)及外部中断使用案例分析
  • GAMES202-高质量实时渲染(Assignment 4)
  • 【Python基础】异常捕获知识梳理
  • Device Mapper 机制
  • Redis数据结构选择策略--String?Hash?怎么选?
  • C++ Saucer 编写Windows桌面应用
  • AI——DeepSeek+LangChain+streamlit 实现智能汽车维修服务
  • 视觉slam十四讲实践部分记录——ch2、ch3
  • 字节开源代码模型——Seed-Coder 本地部署教程,模型自驱动数据筛选,让每行代码都精准落位!
  • ​第八章:漏洞里的人间烟火
  • Linux线程与进程关系及底层实现
  • 瑞数信息入选Gartner《中国API管理市场指南》
  • 亚马逊测评,采购环境安全需要解决哪些问题,提高成功率
  • 验证redis数据结构