创建具有可选字段的元组(Flink Java)

创建具有可选字段的元组(Flink Java),java,tuples,apache-flink,flink-streaming,Java,Tuples,Apache Flink,Flink Streaming,我想存储一个与Tuple2键关联的可选值 为此,我尝试创建一个带有第三个可选字段的类MyKey extensed Tuple3。它可以为null,并且在检查是否相等时不使用 然后我重写了equals()和hashCode()方法: class MyKey extends Tuple3<String, String, String> { @Override public boolean equals(Object o) { if (this == o)

我想存储一个与
Tuple2
键关联的可选值

为此,我尝试创建一个带有第三个可选字段的
类MyKey extensed Tuple3
。它可以为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;
    }
}
类MyKey扩展了Tuple3{
@凌驾
公共布尔等于(对象o){
if(this==o){
返回true;
}
如果(!(myKey的o实例)){
返回false;
}
MyKey元组=(MyKey)o;
如果(f0!=null?!f0.equals(tuple.f0):tuple.f0!=null){
返回false;
}
如果(f1!=null?!f1.equals(tuple.f1):tuple.f1!=null){
返回false;
}
返回true;
}
@凌驾
公共int hashCode(){
int result=f0!=null?f0.hashCode():0;
result=31*result+(f1!=null?f1.hashCode():0);
返回结果;
}
}
  • 这种方法有什么我应该注意的地方吗
  • 有没有其他的解决办法我可以考虑?
您应该知道,Flink与RocksDB state后端一起使用的元组序列化程序无法使用空字段序列化记录。我认为这是一个问题。

这可能是一个xy问题,您试图解决的情况是什么?这可能不是最好的解决方案。我想存储一个与前两个字符串相关联的可选值,这两个字符串组合在一起将始终是唯一的。好的,那么如果该记录可以是空字符串而不是null呢?那就好了。或者可以使用POJO或行而不是元组。有关使用Flink处理不同类型的更多信息,请参阅。