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

被折叠的 条评论
为什么被折叠?



