记一次flink程序中两个不同的算子中用 .filter(Objects::nonNull) 报类型转换错误问题

由于在上个流中有空值返回,所以在下个流用之前会先过滤空值。

然后用到.filter(Objects::nonNull) 

SingleOutputStreamOperator<A> usageStateStream = Stream1      
.filter(Objects::nonNull)
.map(...)
.uid("uid1")
然后在后面很多转换以后的某个流中再次用到.filter(Objects::nonNull) 时,

假设stream2中元素是<B>类型
SingleOutputStreamOperator<C> usageStateStream = Stream2      
.filter(Objects::nonNull)
.map(...)
.uid("uid1")

毫无关系吧。

然后就一直报无法将B转换成A的错误

我就纳闷了。如果我有这么明显的类型转换错误的话,IDE早就检查出来语法错误了。

我什么时候把B转成A了呢?

后来我突然想到。可能是这个Objeccts在第一次出现的时候给赋值上类型A了。

所以才会报这个错。

然后删掉这行。换成别的判断方法解决了。

刚好B类型是个ArrayList。然后我就用ArrayList.isEmpty()判断了。

好坑啊。

或者就简单地

.filter(b -> b != null)

IDEA会提示你变成简写版的, .filter(Objects::nonNull)

不要变就好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值