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(","));