Подтвердить что ты не робот

Groovy сортировать с синтаксисом компаратора

Я просто мочу ноги гремлином. Я понимаю, что гремлин основан на groovy. Я нашел документацию здесь, но я все еще не уверен, что означает синтаксис.

Я немного смущен относительно того, как работает синтаксис сортировки с компаратором:

m.sort{a,b -> a.value <=> b.value}

Может ли кто-нибудь объяснить, что означают все разные биты между { и }?

4b9b3361

Ответ 1

Когда Closure, используемый sort, имеет два параметра, он действует как традиционный Comparator. То есть для каждого сравнения, которое выполняется во время сортировки, между двумя элементами a и b, оно возвращает отрицательное целое число, ноль или положительное целое число, поскольку первый аргумент меньше, равен или больше, чем второй.

В вашем конкретном сценарии сравнение является результатом использования оператора космического корабля <=>. Другими словами, вы эффективно сортируете свои элементы в порядке возрастания.

Например, если у вас есть список [ 3, 2, 1 ], результат использования этого сортировки будет [ 1, 2, 3 ].

Таким образом, m.sort{a,b -> a.value <=> b.value} примерно эквивалентно использованию следующей функции compare:

int compare(a, b) {
  if (a < b) {
    return -1;
  } else if (a > b) {
    return 1;
  } else {
    return 0;
  }
}

Ответ 2

Оператор космического корабля <=> является перегруженным оператором и представляет compareTo(). В основном a<=>b совпадает с a.compareTo(b)

В примере, который вы указали, используется функция sort() с закрытием (например, lambda в Java8). Синтаксис для него следующий:

. Метод { closureParametersstatements}

Итак, ваш пример использует функцию sort() с closure, внутри этого закрытия используется оператор космического корабля (компаратор)

Подробнее о перегрузке оператора здесь