如何将 Apache POI 函数传递给 Groovy 脚本中的 Java 比较器 class

How can I pass an Apache POI function to the Java Comparator class in a Groovy script

尝试通过 Groovy 脚本根据 SoapUI 中列中的值对 Excel 文件中的行进行排序,因为 POI 没有任何内置的行排序职能。我遇到过的一种排序方法是使用 Comparator 方法。但是 Comparator.comparing() 需要将“keyExtractor”函数传递给它。 keyExtractor 函数是 return 一个 Comparable 排序键的函数。 (参考:Comparator.comparing() method discription

尝试传入该文档示例中所示的函数:

    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 中引发错误,指出 :: 是一个意外的标记。使用 .& 运算符代替 :: 会返回 a

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

有什么建议吗??

谢谢

Comparator.comparing 是一种工厂方法,用于从 returns “排序键”的 lambda 或方法引用生成比较器。您还可以使用匿名内部 class 或 Groovy 闭包创建比较器 class。但是,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 }