Scala列表的唯一最大元素

时间:2018-11-07 22:00:01

标签: scala apache-flink

我希望使用apache flink和Scala来执行max函数,如果最大,则返回最大元素(如果唯一),否则返回-1。为了更好地理解,下面有一个示例:

2list[1, 2, 1]的函数的返回。

-1list[3, 3, 1]的函数的返回值,由于其最大结果为3,但在此最大值的列表中并不是唯一的外观。

我认为我可以通过将所有元素放在seq上来做到这一点,但这在flink之后无法正常工作,因此我尝试使用reduce进行操作,但没有成功:/

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

使用Flink API折叠列表。从(0,0)的元组开始。第一个是到目前为止的最大数量,第二个是您找到该数字的次数。

当找到大于元组_1的数字x时,将创建一个元组(x,0)。如果找到小于x的数字,则忽略。如果找到等于x的数字,则将元组的_2递增。

首屏结束时,您将有一个(x,y)元组,其中x是最大数字,y是您发现该数字的次数。

简单的if条件如何帮助您返回x或-1。

编辑:Flink已弃用折叠功能。使用AggregateFunction遍历列表。

https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/api/common/functions/AggregateFunction.html

答案 1 :(得分:0)

这应该可以解决您的问题

\