Java 如何重置EventStream中的最后一个累积值?

Java 如何重置EventStream中的最后一个累积值?,java,javafx,reactfx,Java,Javafx,Reactfx,我有一个来自N个可观察值的合并事件流。从这个值中,我想要最小的一个。例如: Var<Integer> a = Var.newSimpleVar(2); Var<Integer> b = Var.newSimpleVar(3); Var<Integer> c = Var.newSimpleVar(4); ... EventStream<Integer> m = EventStreams.merge(a.val

我有一个来自N个可观察值的合并事件流。从这个值中,我想要最小的一个。例如:

    Var<Integer> a = Var.newSimpleVar(2);
    Var<Integer> b = Var.newSimpleVar(3);
    Var<Integer> c = Var.newSimpleVar(4);
    ...

    EventStream<Integer> m = EventStreams.merge(a.values(), b.values(), c.values(), ...);

    m = m.filter(integer -> integer > 1).accumulate((i1, i2) -> Math.min(i1, i2));
    m.subscribe(integer -> System.out.println(integer));


    a.setValue(0); // At this point the Input is filtered and not emitted also I dont want the last value "2" in the accumulation. 
    b.setValue(5);
    c.setValue(3);
    //Output is always "2".
Var a=Var.newSimpleVar(2);
Var b=Var.newSimpleVar(3);
Var c=Var.newSimpleVar(4);
...
EventStream m=EventStreams.merge(a.values(),b.values(),c.values(),…);
m=m.filter(integer->integer>1)。累加((i1,i2)->Math.min(i1,i2));
m、 订阅(整数->系统输出打印项次(整数));
a、 设置值(0);//在这一点上,输入是过滤的,而不是发出的。我不想在累加中使用最后一个值“2”。
b、 设定值(5);
c、 设定值(3);
//输出总是“2”。
我的问题是,在第一个过滤值之后,我还需要一个新的init值来累加。在本例中,例如“Integer.MAX_VALUE”之类的内容

因此,累积中的下一个比较不是:
“Math.min(2,5)”->“Math.min(2,3)”
但是
“数学最小值(最大值,5)”->“数学最小值(5,3)”

所以输出不应该是:
2,2,2,2,2
但是 a->2:输出最小值2
b->3:输出最小值2
c->4:输出最小值2

a->0:OK条件(值<1)为真。现在重置或更好地重复流(不保留累积中的最后值2)

b->5:输出最小值5
c->3:输出最小值3
a->4:输出最小值3

我会用

EventStreams.combine(a.values(), b.values(), c.values())
            .map(t3 -> t3.map((a, b, c) -> min3(a, b, c)));
其中定义
min3
取3个值中的最小值,但忽略零。

好的,我找到了一个解决方案。 忽略零是一个非常好的提示。谢谢托马斯:)

Var a=Var.newSimpleVar(2);
Var b=Var.newSimpleVar(3);
Var c=Var.newSimpleVar(4);
...
EventStream m=EventStreams.merge(a.values(),b.values(),c.values(),…);
m=m.accumulate((i1,i2)->i2<1?Integer.MAX_值:Math.min(i1,i2)).filter(Integer->Integer!=Integer.MAX_值);
m、 订阅(整数->系统输出打印项次(整数));
a、 设定值(0);
b、 设定值(5);
c、 设定值(3);
a、 设定值(4);
输出为:
a->2:输出最小值2
b->3:输出最小值2
c->4:输出最小值2

a->0:无输出

b->5:输出最小值5
c->3:输出最小值3
a->4:输出最小值3

所以问题是,我不能在累加执行之前进行过滤(在本例中)。 还有一些问题,例如,如果此流中的第一个值为零(修复看起来像
…(i1,i2)->i1<1?i2:i2<1?Integer.MAX_value…
)。
但无论如何,在我或类似的案例中,这种解决方案是有效的,或者应该有效;)

嗯,可能这并不是我想要的;)我的问题是,我不仅有3个值,还有N个值。我想要的是像我想要累加或更好地找到N个值中的最小值,直到条件计算为真。之后,我想重新启动事件流,或者想要一个包含以下所有值的新流,并再次找到最小值。
    Var<Integer> a = Var.newSimpleVar(2);
    Var<Integer> b = Var.newSimpleVar(3);
    Var<Integer> c = Var.newSimpleVar(4);
    ...

    EventStream<Integer> m = EventStreams.merge(a.values(), b.values(), c.values(), ...);
    m = m.accumulate((i1, i2) -> i2 < 1 ? Integer.MAX_VALUE : Math.min(i1, i2)).filter(integer -> integer != Integer.MAX_VALUE);
    m.subscribe(integer -> System.out.println(integer));

    a.setValue(0);
    b.setValue(5);
    c.setValue(3);
    a.setValue(4);