list轉換爲數組html
List list = ['a','b','c','d'] def strs = list as String[] println strs[0]
使用了Groovy語言,就能時不時的感覺到Groovy語言在編碼風格上與Java語言的不一樣。固然,咱們首先感覺到的可能就是在Groovy語言中無處不在的閉包,其中最最經常使用的是each方法。java
好比,下面的代碼段是咱們在Java語言中經常使用的遍歷風格:api
for(int i=0;i<list.size();i++) { System.out.println(list.get(i)); }
可是,咱們在Groovy語言中經常使用的遍歷風格倒是以下的代碼段:數組
list.each{閉包
println it編碼
}.net
這種風格,已經讓我強烈感覺到了Groovy語言編碼的快捷性。可是,咱們,對於長期使用Java語言的咱們來講,Groovy語言在許許多多的地方表現出它的風格,但咱們因爲使用Java語言的慣性,未必能很天然的使用它們。code
好比,咱們有以下的一個集合對象:htm
def list = [1,2,3,4]對象
如今,咱們須要獲得一個集合對象,它的每個元素是上面的list對象的每個元素的兩倍。咱們從Java語言過來的人很容易寫出以下的代碼來:
def result = []
list.each{
result << it*2
}
咱們可能會洋洋自得,咱們的each方法使用的不錯,代碼比起Java語言來簡單得多了。但實際上,Groovy語言爲咱們準備了更加簡單的方法,這就是Groovy語言風格的集合方法--collect方法。
def result = list.collect{it*2}
能夠看到,只有一個語句行,就代替了上面的三個語句行。這就是咱們Groovy風格的代碼,一樣的方法還有"collect
(Collection collection, Closure closure)
","collectAll
(Closure closure)
"和"collectAll
(Collection collection, Closure closure)
"。
仍是上面的list對象,好比,咱們想找出該對象中全部大於2的元素來,咱們的Java語言風格應該是這樣的:
def result = []
list.each{
if(it>2)
result << it
}
println result
可是,這種過濾,在Groovy語言中,一樣能夠找到集合方法來代替它,使得代碼更加具備Groovy語言風格:
def result = list.grep{
it > 2
}
println result
是的,在Groovy語言中,咱們對集合元素的過濾通常都使用"grep"方法,這樣的代碼更加具備Groovy風格一些。具備一樣一些功能的方法還有"find
(Closure closure)
","findAll
(Closure closure)
"。
在Java語言中,對List的遍歷方法是萬能的,咱們要作的一切功能都必須從遍歷方法開始。好比,咱們想知道上面的list對象是否全部的元素都大於0。在Java語言中,咱們會寫出以下的代碼:
boolean isMoreThanZero = true;
for(int i in list)
{
if(i<=0)
{
isMoreThanZero = false;
break;
}
}
println isMoreThanZero
在Groovy語言中,一樣有Groovy風格的方法來幫咱們省掉一大段的代碼,這就是"every"方法:
def isMoreThanZero = list.every{
it>0
}
println isMoreThanZero
一樣類型的方法還有"any
(Closure closure)
","any
()
"和"every
()
"。
除了上面的一些Groovy風格的代碼,咱們還有難度更大一些的Groovy語言風格的方法,好比注入方法--"inject"。
好比,咱們想把list對象的全部元素相加起來,而後再和10求和。Java語言的編碼風格看起來以下:
def count = 10
list.each{
count+=it
}
println count
但Groovy語言風格的代碼看起來以下所示:
def count = list.inject(10){result,it->
result+it
};
println count
相似這樣的注入方法,Groovy語言還有集合方法"count
(Object value)
"。
還有一個集合方法,對於字符串特別好用。好比,咱們想把上面的list對象的全部元素鏈接成一個字符串。Java語言的風格是這樣的:
def result = ''
list.each{
result+=it
}
println result
Groovy語言風格的代碼則是以下:
def result = list.join()
println result
好了,就舉出這麼多了,都是一些集合方法配合閉包來使用而造成的Groovy語言風格的代碼,寫起來既快捷又簡約,體現出Groovy語言做爲動態語言的特色來。