Groovy高效程式設計——‘匕首方法’的使用
Groovy提供了許多‘匕首方法’(匕首,短小精悍也~如each,eachWithIndex,any,every,grep,join,sort,find,findAll,collect,groupBy,inject,reverse,tokenize,
unique,max,min,count,sum等)來提升開發者的開發效率,但常被Java開發人員忽視。在這篇隨筆中我將為您演示各方法的使用。
each
遍歷list
遍歷map
eachWithIndex
帶index的each
any
只要存在一個滿足條件(此例中的條件為elem.length() < 3)的element就返回true,否則返回false
every
所有的element都滿足條件才返回true,否則返回false
grep
符合條件的element會被提取出來,形成一個list
條件以closure的形式傳入
條件以regex的形式傳入,符合regex的element被提取出來形成一個list
條件以collection的形式傳入,在collection中的element被提取出來形成一個list,可以看作求兩個collection的交集
join
用指定的字元連線collection中的element
sort
根據指定條件進行排序
find
查詢collection中滿足條件的‘第一個’element
findAll
查詢collection中滿足條件的‘所有’element
collect
對collection的element進行處理,並將處理結果放到一個新的collection中
對map進行處理
groupBy
對collection中的element按給定條件進行分組
inject
一個累積的過程,傳入inject方法的'I'作為sum的初始值,在遍歷collection的過程中,將處理結果("$sum $elem ")儲存到sum中
reverse
將collection中各element的次序顛倒一下
顛倒字串
tokenize
指定分隔符,取得token集
unique
去除collection中重複的element
max
求最大值
按指定的比較內容(此例的比較內容為長度length),在collection中選出最大的element
min與max類似,求最小值,再次就不演示用法了,用法與max相同,將上述程式碼中的max改為min即可
count
計數
對字串"aaba"中的a進行計數
sum
求和
求字串的‘和’,其實就是連線字串
each
遍歷list
def list = ['a', 'b', 'c']
list.each { elem ->
println elem
}
執行結果:list.each { elem ->
println elem
}
a
b
c
b
c
遍歷map
def map = [name:"山風小子", address:"Shanghai"]
map.each { key, value ->
println "$key : $value"
}
執行結果:map.each { key, value ->
println "$key : $value"
}
name : 山風小子
address : Shanghai
address : Shanghai
eachWithIndex
帶index的each
def list = ['a', 'b', 'c']
list.eachWithIndex { elem, i ->
println "$i : $elem"
}
執行結果:list.eachWithIndex { elem, i ->
println "$i : $elem"
}
0 : a
1 : b
2 : c
1 : b
2 : c
any
只要存在一個滿足條件(此例中的條件為elem.length() < 3)的element就返回true,否則返回false
def list = ['a', 'ab', 'abc']
list.any { elem ->
elem.length() < 3
}
執行結果:list.any { elem ->
elem.length() < 3
}
true
every
所有的element都滿足條件才返回true,否則返回false
def list = ['a', 'ab', 'abc']
list.every { elem ->
elem.length() < 3
}
執行結果:list.every { elem ->
elem.length() < 3
}
false
grep
符合條件的element會被提取出來,形成一個list
條件以closure的形式傳入
def list = ['a', 'ab', 'abc']
list.grep { elem ->
elem.length() < 3
}
執行結果:list.grep { elem ->
elem.length() < 3
}
["a", "ab"]
條件以regex的形式傳入,符合regex的element被提取出來形成一個list
def list = ['a', 'ab', 'abc']
list.grep(~/../)
執行結果:list.grep(~/../)
["ab"]
條件以collection的形式傳入,在collection中的element被提取出來形成一個list,可以看作求兩個collection的交集
def list = ['a', 'ab', 'abc']
list.grep(['a', 'cde', 'ab'])
執行結果:list.grep(['a', 'cde', 'ab'])
["a", "ab"]
join
用指定的字元連線collection中的element
def list = [2007, 8, 26]
list.join('-')
執行結果:list.join('-')
2007-8-26
sort
根據指定條件進行排序
def list = [2007, 8, 26]
list.sort { e1, e2 ->
return e1 - e2
}
執行結果:list.sort { e1, e2 ->
return e1 - e2
}
[8, 26, 2007]
find
查詢collection中滿足條件的‘第一個’element
def list = [2007, 8, 26]
list.find { elem ->
elem <30
}
執行結果:list.find { elem ->
elem <30
}
8
findAll
查詢collection中滿足條件的‘所有’element
def list = [2007, 8, 26]
list.findAll { elem ->
elem < 30
}
執行結果:list.findAll { elem ->
elem < 30
}
[8, 26]
collect
對collection的element進行處理,並將處理結果放到一個新的collection中
def list = ['a', 'b', 'c']
list.collect { elem ->
elem * 2
}
執行結果:list.collect { elem ->
elem * 2
}
["aa", "bb", "cc"]
對map進行處理
def map = [name:'山風小子', address:'Shanghai']
map.collect { entry ->
"${entry.key} : ${entry.value}"
}
執行結果:map.collect { entry ->
"${entry.key} : ${entry.value}"
}
[name : 山風小子, address : Shanghai]
groupBy
對collection中的element按給定條件進行分組
def list = ['a', 'b', 'abc', 'ab', 'c', 'bc']
list.groupBy { elem ->
elem.length()
}
執行結果:list.groupBy { elem ->
elem.length()
}
[1:["a", "b", "c"], 2:["ab", "bc"], 3:["abc"]]
inject
一個累積的過程,傳入inject方法的'I'作為sum的初始值,在遍歷collection的過程中,將處理結果("$sum $elem ")儲存到sum中
def list = ["love", "you"]
list.inject('I') { sum, elem ->
"$sum $elem "
}
執行結果:list.inject('I') { sum, elem ->
"$sum $elem "
}
I love you
reverse
將collection中各element的次序顛倒一下
def list = ['a', 'b', 'c']
list.reverse()
執行結果:list.reverse()
["c", "b", "a"]
顛倒字串
def list = 'abc'
list.reverse()
執行結果:list.reverse()
cba
tokenize
指定分隔符,取得token集
'a1/b2/c3/d4'.tokenize('/')
執行結果:
["a1", "b2", "c3", "d4"]
unique
去除collection中重複的element
def list = ['a', 'b', 'b', 'a', 'c']
list.unique()
執行結果:list.unique()
["a", "b", "c"]
max
求最大值
def list = [1, 2, 3]
list.max()
執行結果:list.max()
3
按指定的比較內容(此例的比較內容為長度length),在collection中選出最大的element
def list = ['a', 'ab', 'abc']
list.max { elem ->
elem.length()
}
list.max { elem ->
elem.length()
}
min與max類似,求最小值,再次就不演示用法了,用法與max相同,將上述程式碼中的max改為min即可
count
計數
def list = ['a', 'ab', 'a']
list.count('a')
執行結果:list.count('a')
2
對字串"aaba"中的a進行計數
def list = "aaba"
list.count('a')
執行結果:list.count('a')
3
sum
求和
def list = [1, 2, 3]
list.sum()
執行結果:list.sum()
6
求字串的‘和’,其實就是連線字串
def list = ['a', 'b', 'c']
list.sum()
執行結果:list.sum()
abc
相關文章
- Groovy探索 使用集合方法,寫出更加Groovy風格的程式碼
- 高效的面試方法:結對程式設計面試程式設計
- 五種Java程式設計高效程式設計方法 - BablaJava程式設計
- Groovy + Java 混合程式設計方案:GMavenJava程式設計Maven
- 高效程式設計程式設計
- python高效能程式設計方法一Python程式設計
- 讓 Web 設計師高效學習程式碼的 6 個方法Web
- Java高效程式設計之二【對所有物件都通用的方法】Java程式設計物件
- 我的高效程式設計祕訣程式設計
- 谷歌程式設計師有哪些高效的程式設計習慣?谷歌程式設計師
- 使用 .NET Core 高效能併發程式設計程式設計
- 在Java中呼叫Groovy方法的又一種方法:使用介面Java
- 高效程式設計師的 5 種角色程式設計師
- 高效前端程式設計實踐前端程式設計
- 高效程式設計之道:好好休息程式設計
- Python高效程式設計技巧Python程式設計
- 我的iOS高效程式設計祕訣-堅持程式設計習慣iOS程式設計
- 10 個讓敏捷設計更加高效的方法敏捷
- XML 程式設計思想: Harold 的高效 XML 設計原則(轉)XML程式設計
- 高效程式設計師的七個習慣程式設計師
- Java 高效程式設計之 Builder 模式Java程式設計UI模式
- 高效能JavaScript DOM程式設計JavaScript程式設計
- Swoole PHP高效能程式設計PHP程式設計
- 招聘程式設計師的方法程式設計師
- 程式設計師的macOS系列:高效Alfred進階程式設計師MacAlfred
- 高效程式設計師的特徵:聰明 懶惰程式設計師特徵
- 高效程式設計師的特徵:聰明,懶惰程式設計師特徵
- 讓開發者高效程式設計的10個新框架程式設計框架
- C語言高效程式設計的幾招(轉)C語言程式設計
- 4天時間教你用最高效的方法搭建Java程式設計思維!Java程式設計
- 遊戲架構設計——高效能並行程式設計遊戲架構並行行程程式設計
- 程式設計師程式設計時的簡單方法與技巧程式設計師
- 如何使用搜尋技巧來成為一名高效的程式設計師程式設計師
- 18個Python高效程式設計技巧!Python程式設計
- 高效能javascript程式設計筆記JavaScript程式設計筆記
- UCP - 高效能 Oracle JDBC 程式設計OracleJDBC程式設計
- 高效能JavaScript 程式設計實踐JavaScript程式設計
- 程式設計之美之高效安排見面會程式設計