Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中将值修改为Tuple2_Java_Scala_Apache Flink_Final_Accumulator - Fatal编程技术网

如何在Java中将值修改为Tuple2

如何在Java中将值修改为Tuple2,java,scala,apache-flink,final,accumulator,Java,Scala,Apache Flink,Final,Accumulator,我在折叠函数中使用累加器。我想更改累加器的值 我的函数如下所示: public Tuple2<String, Long> fold(Tuple2<String, Long> acc, eventClass event) { acc._1 = event.getUser(); acc._2 += event.getOtherThing(); return acc } 然后用它和 acc.f0 = event.getUser(); acc.f1 +

我在折叠函数中使用累加器。我想更改累加器的值

我的函数如下所示:

public Tuple2<String, Long> fold(Tuple2<String, Long> acc, eventClass event) 
{
    acc._1 = event.getUser();
    acc._2 += event.getOtherThing();
    return acc
}
然后用它和

acc.f0 = event.getUser();
acc.f1 += event.getByteDiff();
return acc;
我不知道你在和哪个Tuple2合作。返回一个新对象怎么样:

Tuple2<String, Long> tuple = new Tuple2<String, Long>();
tuple._1 = event.getUser();
tuple._2 = event.getOtherThing() + acc._2;
return tuple;
我不知道你在和哪个Tuple2合作。返回一个新对象怎么样:

Tuple2<String, Long> tuple = new Tuple2<String, Long>();
tuple._1 = event.getUser();
tuple._2 = event.getOtherThing() + acc._2;
return tuple;

我不知道您仍然使用什么类型的Tuple2,但我假设它是scala Tuple2。 scala Tuple2是不可变的。不能更改不可变对象的值,必须重新创建它。 为什么?scala Tuple2是一种函数式编程数据结构,因此,与函数式编程的所有概念一样,它试图减少副作用。 您可以使用.copy函数根据需要重新创建它。 以下是代码示例:

 @Test
    public void test() {
        Tuple2<String,Long> tuple = new Tuple2<>("a",1l);
        Tuple2<String,Long> actual = tuple.copy(tuple._1,tuple._2+1);
        Tuple2<String,Long> expected = new Tuple2<>("a",2l);
        assertEquals(actual,expected);
    }


我不知道您仍然使用什么类型的Tuple2,但我假设它是scala Tuple2。 scala Tuple2是不可变的。不能更改不可变对象的值,必须重新创建它。 为什么?scala Tuple2是一种函数式编程数据结构,因此,与函数式编程的所有概念一样,它试图减少副作用。 您可以使用.copy函数根据需要重新创建它。 以下是代码示例:

 @Test
    public void test() {
        Tuple2<String,Long> tuple = new Tuple2<>("a",1l);
        Tuple2<String,Long> actual = tuple.copy(tuple._1,tuple._2+1);
        Tuple2<String,Long> expected = new Tuple2<>("a",2l);
        assertEquals(actual,expected);
    }


我们在同一时刻有着同样的想法。好的,这是一个解决方案。不过,为什么我不能仅仅改变acc的_1和_2?显然是scala的_1和_2,这不是我想要的。。。定义:case类Tuple2[@scala.specialized+T1,@scala.specialized+T2]val\u 1:T1,val\u 2:T2使用scala.Product2[T1,T2]和scala.Product扩展scala.AnyRef和scala.Serializable{我们在同一时刻得到了相同的结果。好吧,这是一个解决方案。但是,为什么我不能仅仅改变acc的_1和_2?显然是scala的_1和_2,这不是我想要的…定义:case类Tuple2[@scala.specialized+T1,@scala.specialized+T2]val _1:T1,val _2:T2用scala.Product2扩展scala.AnyRef[T1,T2]使用scala.Product和scala.Serializable{请提供Tuple2类的FQN。@scrutari它是scala.Tuple2。我想这不是我想要的。我应该取哪一个?scala元组是不可变的。你可以阅读它。请提供Tuple2类的FQN。@scrutari它是scala.Tuple2。我想这不是我想要的。我应该取哪一个?scala元组是我想要的吗mmutable。你可以读到它。我可以使用不同的元组类吗?一个是可变的?除了来自flink的那个。我不知道。在scala lang上没有像flink那样的可变元组。但是我想建议你不要预优化你的代码。试着使用copy函数,只有在你注意到你的代码在创建时会很慢之后你开始优化多个对象。但我不认为会发生这种情况。我可以使用不同的元组类吗?一个是可变的?除了flink的那个。我不知道。在scala lang上没有像flink那样的可变元组。但我想建议你不要预优化代码。试着使用复制函数,只使用在你注意到你的代码在创建多个对象时会很慢之后,你就开始优化了。但是我认为这不会发生。