创建一个带有可选字段的元组(Flink Java)



我想存储一个与Tuple2<String, String>键关联的可选值。

为此,我尝试创建一个可选字段的class MyKey extends Tuple3<String, String, String>。它可以为 null,并且在检查相等性时不使用。

然后我覆盖了 equals(( 和 hashCode(( 方法:

class MyKey extends Tuple3<String, String, String> {
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof myKey)) {
return false;
}
MyKey tuple = (MyKey) o;
if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) {
return false;
}
if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = f0 != null ? f0.hashCode() : 0;
result = 31 * result + (f1 != null ? f1.hashCode() : 0);
return result;
}
}
  • 使用这种方法,我应该注意什么陷阱吗?
  • 还有其他我可以考虑的解决方案吗?

你应该知道,Flink 与 RocksDB 状态后端一起使用的元组序列化程序不能序列化具有空字段的记录。我会说这是一个问题。

最新更新