如何为 Hazelcast Jet 制定一个优雅的顶点以获得最小值?
How to formulate an elegant vertex for Hazelcast Jet to get the minimum?
我正在努力思考 Hazelcast Jets accumulate 处理器中的双功能用法。第一次尝试是一个简单的最小比较,但我想出的东西看起来很不雅观。有更好的方法吗?
Vertex min = dag.newVertex("min", accumulate(()
-> new myObject(Type.SOME_ENUM,Double.MAX_VALUE,0L),
(cMin, x) -> (((myObject) x).getValue() < cMin.Value()) ? (myObject) x) : cMin,
(cMin) -> cMin));
基本上我有一个包含 3 个字段的 class:类型、值、时间戳,我想获得具有最低值的对象。
我的供应商是一个值为 max.double 的新对象,看起来不错。我的终结者只是通过了对象,这也很好。
但是累加器看起来复杂得没必要。有没有办法避免将 x 强制转换为 myObject 两次?或者一些更优雅的方式,只保留 double 值,但最后仍然 return 对象?无需遍历整个地图以再次获取最小值的对象?
您可以将类型参数用于静态方法:
Vertex min = dag.newVertex("min", Processors.<myObject, myObject>accumulate(
() -> new myObject(Type.SOME_ENUM,Double.MAX_VALUE,0L),
(cMin, x) -> x.getValue() < cMin.getValue() ? x : cMin));
我还使用了双参数构造函数,它提供 identity()
作为第三个参数。
顺便说一句,myObject
应该是 MyObject
,这是一个 Java 约定。
您的表达式中没有任何内容指示累加器函数期望的项目类型(x
)。从理论上讲,可以通过将已知类型的累加值传播到构成 lambda 体的表达式并发现 x
必须与其赋值兼容来推断它,但 Java 不这样做。
因此您必须添加更多显式类型,例如在累加器函数中提供显式类型:
Vertex min = dag.newVertex("min", accumulate(() -> new MyObject(Double.MAX_VALUE),
(MyObject acc, MyObject x) -> x.getValue() < acc.getValue() ? x : acc));
我正在努力思考 Hazelcast Jets accumulate 处理器中的双功能用法。第一次尝试是一个简单的最小比较,但我想出的东西看起来很不雅观。有更好的方法吗?
Vertex min = dag.newVertex("min", accumulate(()
-> new myObject(Type.SOME_ENUM,Double.MAX_VALUE,0L),
(cMin, x) -> (((myObject) x).getValue() < cMin.Value()) ? (myObject) x) : cMin,
(cMin) -> cMin));
基本上我有一个包含 3 个字段的 class:类型、值、时间戳,我想获得具有最低值的对象。
我的供应商是一个值为 max.double 的新对象,看起来不错。我的终结者只是通过了对象,这也很好。
但是累加器看起来复杂得没必要。有没有办法避免将 x 强制转换为 myObject 两次?或者一些更优雅的方式,只保留 double 值,但最后仍然 return 对象?无需遍历整个地图以再次获取最小值的对象?
您可以将类型参数用于静态方法:
Vertex min = dag.newVertex("min", Processors.<myObject, myObject>accumulate(
() -> new myObject(Type.SOME_ENUM,Double.MAX_VALUE,0L),
(cMin, x) -> x.getValue() < cMin.getValue() ? x : cMin));
我还使用了双参数构造函数,它提供 identity()
作为第三个参数。
顺便说一句,myObject
应该是 MyObject
,这是一个 Java 约定。
您的表达式中没有任何内容指示累加器函数期望的项目类型(x
)。从理论上讲,可以通过将已知类型的累加值传播到构成 lambda 体的表达式并发现 x
必须与其赋值兼容来推断它,但 Java 不这样做。
因此您必须添加更多显式类型,例如在累加器函数中提供显式类型:
Vertex min = dag.newVertex("min", accumulate(() -> new MyObject(Double.MAX_VALUE),
(MyObject acc, MyObject x) -> x.getValue() < acc.getValue() ? x : acc));