Groovy探索 使用集合方法,寫出更加Groovy風格的程式碼
Groovy探索 使用集合方法,寫出更加Groovy風格的程式碼
使用了Groovy語言,就能時不時的感受到Groovy語言在編碼風格上與Java語言的不同。當然,我們首先感受到的可能就是在Groovy語言中無處不在的閉包,其中最最常用的是each方法。
比如,下面的程式碼段是我們在Java語言中常用的遍歷風格:
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}
但是,我們在Groovy語言中常用的遍歷風格卻是如下的程式碼段:
list.each{
println it
}
這種風格,已經讓我強烈感受到了Groovy語言編碼的快捷性。但是,我們,對於長期使用Java語言的我們來說,Groovy語言在許許多多的地方表現出它的風格,但我們由於使用Java語言的慣性,未必能很自然的使用它們。
比如,我們有如下的一個集合物件:
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語言作為動態語言的特點來。
相關文章
- Groovy探索之Gpath和List的結合 更加Groovy風格的程式碼
- Groovy高效程式設計——‘匕首方法’的使用程式設計
- Groovy探索 Visitor模式模式
- 提高Groovy品質 Groovy 1.5.2釋出
- Groovy 2.0.6和Groovy 2.1 beta版本釋出
- [Groovy]Groovy指令碼的5種執行方式指令碼
- Groovy 2.0釋出
- Groovy 2.0.4 釋出
- groovy之動態指令碼的使用指令碼
- 用Groovy思考第一章用Groovy簡化Java程式碼Java
- groovy
- JAVA與groovy指令碼的結合使用Java指令碼
- 用Groovy讀取本地檔案的程式碼
- Groovy and SoapUIUI
- 如何使用Go語言寫出物件導向風格的程式碼Go物件
- 在Java中呼叫Groovy方法的又一種方法:使用介面Java
- Groovy探索 DSL在Calendar類上的實踐 一
- java中呼叫groovy指令碼Java指令碼
- Groovy-Eclipse 2.7 釋出Eclipse
- groovy安裝
- nGrinder中快速編寫groovy指令碼01-指令碼結構指令碼
- Groovy初學者指南
- Groovy閉包理解
- Groovy動態解析
- Parse CSV file with Groovy
- groovy : 隨機數隨機
- PEP 8 程式程式碼的編寫風格指南
- Groovy核心類原始碼講解(上)原始碼
- Groovy + Java 混合程式設計方案:GMavenJava程式設計Maven
- groovy 程式語言簡單介紹
- Java執行groovy指令碼的兩種方式Java指令碼
- Java動態指令碼Groovy,高階啊!Java指令碼
- IDEA 利用groovy指令碼生成註釋Idea指令碼
- Java和groovy相互呼叫Java
- groovy之範圍特性
- groovy與javah互相呼叫Java
- Groovy 簡單入門
- nGrinder中快速編寫groovy指令碼04-傳送POST請求指令碼