为什么我不能在 groovy 闭包中使用字符串方法?- 没有方法调用的候选者

Why I cannot use string methods inside groovy closure? - no candidate for method call

提问人:Azm 提问时间:5/6/2023 更新时间:5/7/2023 访问量:33

问:

我有简单的哈希图并想操作它,但 IDE 无法识别这些方法。对 Groovy 完全陌生,所以不确定出了什么问题。

    def percentages = [
        "x1" : "20%",
        "x2" : "30%",
        "x3" : "0.4",
        "x4" : "50%",
        "x5" : "0.6"]

    percentages.each {
    val ->
         if(val[2].endsWith("%")) {
        val[2].deleteCharAt(val.length()-1)
        println val
    }
}

enter image description here

String Groovy 开合

评论


答:

1赞 Andrej Istomin 5/6/2023 #1

当你这样做时,你遍历 map 和 每个元素都是 .这可能是您需要的:percentages.eachjava.util.Map.Entry

import java.util.Map.Entry

def percentages = [
    "x1": "20%",
    "x2": "30%",
    "x3": "0.4",
    "x4": "50%",
    "x5": "0.6"]

percentages.each { Entry<String, String> val ->
    if (val.value.endsWith("%")) {
        val.value = val.value.substring(0, val.value.length() - 1)
        println val
    }
}

甚至更紧凑,正如@daggett建议的那样:

def percentages = [
    "x1": "20%",
    "x2": "30%",
    "x3": "0.4",
    "x4": "50%",
    "x5": "0.6"]

percentages.each {k, v ->
    if (v.endsWith("%")) {
        percentages[k] = v.substring(0, v.length() - 1)
        println percentages[k]
    }
}

评论

1赞 Azm 5/6/2023
没错,脸掌。谢谢!
2赞 daggett 5/7/2023
percentages.each{k,v-> ...}