摸不着头脑,flatMap处理后居然无法去重(原来是数据库添加字段的时候多了个空格= =)

前言

这应该是一个bug。这是一篇毫无营养的博客。

当我正在尝试从页面中获取作者时,发现之前应该被Set包装的作者字符串居然发生了重复,于是我赶紧回到源码处,并加了条log日志,开始排查问题

我的代码是这样的:

// 查作者(绝对也会有)
Set<String> collect2 = bookByCategoryId.stream().flatMap(book->{
	String author = book.getAuthor();
	String[] split = author.split(";");
	return Arrays.asList(split).stream();			
}).distinct().collect(Collectors.toSet());

bookByCategoryId是我的book集合。一本书的作者可能会有多个,我选择使用;(冒号),把每一个作者隔开。

问题来了,这是结果图:

在这里插入图片描述
分号使用得很成功,但无论是Set还是distinct,都无法完成去重。

于是我做了三个测试

第一个测试

使用原始字符集合测试:

在这里插入图片描述
毫无意外,测试成功了,使用distinct就可以圆满完成任务。

所以我猜测是不是因为自定义类型的问题?

第二个测试

使用自定义book(并和我的原始book一样,使用@Data注解)

在这里插入图片描述
开始测试:

在这里插入图片描述
这里使用的是Set,很完美的结果。

似乎回到原点了,我依然不清楚到底是什么导致我无法去重,于是我开始测试其他属性,例如:分类Id。

第三个测试

分类id:

在这里插入图片描述

这次总算没让我大跌眼镜,终于就在这时,我想起来了会不会是我复制粘贴的时候,字符串多了空格?导致匹配失败的?

我去数据库看了看,发现作者后面还真是多了一个空格,到此问题终于解决了。(小白落泪)。在知道原因后,看控制台也发现一个字符也确实比后面的多了一个空格。(恨不得给自己打一耳光,浪费了一个小时多的时间。比起人脑,机器是不可能出错的啊)


结尾的小总结

复制粘贴也不是一定可靠,尤其是在网页复制粘贴的时候(会有很多奇奇怪怪的空格)

处理字符串需要特别严谨:

  1. null和""不是一回事。
  2. 处理前应该把左右两边的空格去掉。

集合也是一样,null和size() == 0 也不是同一件事。

stream处理后的集合的值不可能会是null,但size()可能是0。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值