如何比较 groovy 中的值

How to compare values in groovy

我正在尝试将当前版本与某个程序的可用版本进行比较。我想要比当前版本更高的所有可用版本。我不知道如何进行比较:

groovy.txt 样本:

11.6

groovy1.txt 样本:

9.6.3 9.6.6 9.6.8 9.6.9 9.6.11 9.6.12 9.6.16 10.14 10.14 10.16 11.4 11.6 11.7 11.8 11.9 11.11 12.4 12.6

当我这样做时,由于 av.findAll { it > cv }:

中的强制转换,我遇到了以下错误
Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String

出现您的问题是因为标记化 returns 无法与字符串进行比较的字符串列表。它发生在这一行:

av.findAll { it > cv }

cv 使用:

def cv = output.tokenize().collect { it.tokenize('.').collect { it as int } }.first()

对于av

def av = output2.tokenize().collect { it.tokenize('.').collect { it as  int } }

我将 9.6.11 之类的版本号放入 [9, 6, 11] 之类的数组中进行比较,直到找出数字是否更大。

然后写代码比较版本:

av.findAll { 
    def isVersionGreater
    it.indexed().any { i, v ->
        if (cv[i] == v) return false
        isVersionGreater = v > (cv[i] ?: 0)
        return true
    }
    return isVersionGreater
}.collect { it.join('.') }

AFAIK,不幸的是,Groovy 没有 Python 等同于 [9, 6, 11] < [11, 1] 来比较版本。