2013-04-14 26 views
1

我試圖在拆分字符串上調用方法「findResults」,但得到編譯錯誤。分割一個字符串會返回一個字符串數組,我認爲這將被視爲Groovy中的一個Collection。其他集合方法在String Array上工作,所以我的問題是:我遇到了一個錯誤?Groovy中的findResults方法似乎不適用於字符串數組

def names = "john paul pete" 
assert names.split().findResults{if (it.startsWith("p")) return it.capitalize()}.join(" ") == "Paul Pete" 

結果: groovy.lang.MissingMethodException:方法的無簽名:[Ljava.lang.String; .findResults()是適用於參數類型:(gard_split_check $ _run_closure2)值:[gard_split_check $ _run_closure2 @ 722b302]

NB我知道我可以通過在上面的代碼中用tokenize()替換split()或將split()方法的結果強制轉換爲List來獲得正確的結果。

回答

1

正如groovydoc中所述,split將返回一個字符串數組,它沒有很多groovy增強功能。 tokenize返回的不是數組列表:

def names = "john paul pete" 
assert names.tokenize().findResults { 
    if (it.startsWith("p")) it.capitalize() 
}.join(" ") == "Paul Pete" 
+2

我錯誤地得出結論,能夠像援引「收集」的字符串數組表示,Groovy中把數組作爲一個集合的方法。閱讀完您的答案後,我深入瞭解了一番,發現Groovy將「collect」方法添加到Object類中。相反,「findResults」方法僅在類Collection中定義。謝謝! – user2279514

相關問題