关于java8 stream的map问题记录

博客讲述了在Java编程中,如何处理List对象中可能存在空字段的情况。作者分享了在使用Stream API转换字段为逗号分隔字符串时遇到的问题,即空字段被转换为null字符串。通过引入StringUtils工具类进行判断和过滤,优化了代码,避免了不必要的空值问题。解决方案包括使用filter方法直接过滤空值,提高了代码的效率和可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2022-03-10记录此坑
需求是将一个实体类List中的一个字段转成逗号隔开的字符串。
然后我之前这么写:

List<TmsOrderForExportVo> orderList = map返回的查询结构
String codes = orderList.stream()
.map(TmsOrderForExportVo::getContractCode)
.collect(Collectors.joining(","));

测试数据这个字段是空的,null值,然后我打印了一下codes长度,我擦,竟然是一个长度为4的"null"字符串!!!

附上一个测试:

在这里插入图片描述
可以看到,我插入了10个null,返回的结果就打印了个这玩意。。

新的写法:

String codes = orderList.stream()
.map(order -> StringUtils.isNotBlank(order.getContractCode()) ? 
order.getContractCode() : "").collect(Collectors.joining(","));

而这个问题似乎是map的时候将空字段null搞成了字符串,不管是返回字符串还是List,如果是list,则会返回一个[“null”]。

晚上发现上面这么写太蠢了,虽说要判空,但是为啥不直接过滤呢。。

String codes = orderList.stream()
                .map(TmsOrderForExportVo::getContractCode)
                .filter(StringUtils::isNotBlank)
                .collect(Collectors.joining(","));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值