Как передать функцию Apache POI классу Java Comparator в скрипте Groovy - PullRequest
0 голосов
/ 19 июня 2020

Попытка выполнить сортировку строк в файле Excel на основе значения в столбце в SoapUI с помощью сценария Groovy, поскольку в POI нет встроенных функций сортировки строк. Один из методов сортировки, с которыми я столкнулся, использует метод Comparator. Но Comparator.comparing() требует, чтобы в него была передана функция keyExtractor. Функция keyExtractor - это функция, которая возвращает ключ сортировки Comparable. (Ссылка: Описание метода Comparator.comparing () )

Пытался передать функцию, как показано в примере этого документа:

    Row tempRow = rows.get(1) //Header row exists in the data
    Comparator<Row> sortByColumn = Comparator.comparing((tempRow.getCell(colNum)::getStringCellValue))
    rows.sort(Comparator.comparing(sortByColumn))

, которая выдает ошибка в SoapUI Groovy, говорящая, что :: является неожиданным токеном. Использование оператора .& вместо :: возвращает

groovy.lang.MissingMethodException: No signature of method: static java.util.Comparator.comparing() is applicable for argument types: (java.util.Comparator$$Lambda$225/23399299) values: [java.util.Comparator$$Lambda$225/23399299@748b00]

Любые предложения .??

Спасибо

1 Ответ

0 голосов
/ 20 июня 2020

Comparator.comparing - это фабричный метод, который используется для генерации компаратора из лямбда-выражения или ссылки на метод, которая возвращает «ключ сортировки». Вы также можете создать класс компаратора, используя анонимный внутренний класс или замыкание Groovy. Однако Groovy предлагает методы расширения для сортировки, которые напрямую используют замыкания, почти так же, как работает Comparator.comparing.

int colNum = ... // the column to sort on
// use "tail()" to exclude the header row from the sorted result
def sorted = rows.tail().sort { row -> row.getCell(colNum).stringCellValue }
...