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

[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}

相关文章:

  • CentOS7.9 查询运维安全日志,排查恶意用户
  • Oraclede 的体系结构
  • V837s-调整内核dmesg内容ring buffer大小
  • 调用支付宝接口响应40004 SYSTEM_ERROR问题排查
  • 标准 IO 流- Rust 标准输入 stdin 与 C/C++ 标准输入(Standard I/O Input)对比分析
  • iview组件库:自定义方法去控制Tree树形数据的根节点与叶节点的关联性
  • Vim 高亮命令完整学习笔记
  • 看板任务描述不清如何解决
  • Blogx项目配置文件读取流程详解
  • coze的基本使用
  • 【使用LLM搭建系统】7 搭建一个带评估的端到端问答系统
  • 第6章 方法 笔记
  • 自动化三维扫描检测赋能汽车铸造件高效检测
  • 【Flash 芯片 MTD 专栏】Flash芯片识别异常导致mtd子系统分区创建失败
  • 「Java基本语法」运算符与表达式
  • Brooks SLA5810 SLAMf10-20橡胶密封压力控制器Models SLA5810/20 and SLAMf10/20
  • VSCode主题设计
  • Unity基础-协程
  • STL 6分配器
  • matlab画图时如何屏蔽title等函数中缺省的latex解释
  • 网站上的图标用什么软件做的/百度推广营销怎么做
  • 有哪些好的网站建设公司/网站设计的基本原则
  • 免费psd模板网站/关键词排名优化公司外包
  • 安徽网站制作/电子商务seo实训总结
  • 怎样做网站首页/最近一周的新闻大事10条
  • 做威尼斯网站代理算是违法吗/58同城发布免费广告