Уникальный максимальный элемент списка Scala - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу сделать функцию max, используя apache flink с Scala, которая возвращает максимальный элемент, если он уникален, и -1 в противном случае. Для лучшего понимания ниже приведен пример:

2 - возврат функции для list[1, 2, 1].

-1 - это возвращение функции для list[3, 3, 1], поскольку из-за максимального результата будет три, но оно не является уникальным отображением в списке этого максимального значения.

Я подумал, что мог бы сделать, поместив все элементы в seq, но после flink это не сработало, поэтому я попытался использовать уменьшение, но у меня ничего не получилось: /

Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Это должно решить вашу проблему

 val x: List[Int] = ???
 val grouped: Map[Int, List[Int]] = x.groupBy(identity)
 val uniqueElements:List[Int] = grouped.filter( _._2.size == 1 ).map(_._1).toList
 val maxVal = if(uniqueElements.isEmpty ) -1 else uniqueElements.max
0 голосов
/ 08 ноября 2018

Используйте Flink API, чтобы сложить список. Начните с кортежа (0, 0). первое - это максимальное число на данный момент, а второе - количество раз, которое вы нашли это число.

Когда вы найдете число x, которое больше _1 кортежа, вы создаете кортеж (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

...