博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Groovy高效编程——‘匕首方法’的使用
阅读量:2396 次
发布时间:2019-05-10

本文共 3301 字,大约阅读时间需要 11 分钟。

Groovy提供了许多‘匕首方法’(匕首,短小精悍也~如each,eachWithIndex,any,every,grep,join,sort,find,findAll,collect,groupBy,inject,reverse,tokenize, unique,max,min,count,sum等)来提升开发者的开发效率,但常被Java开发人员忽视。在这篇随笔中我将为您演示各方法的使用。
 


each 

遍历list

def list 
=
 [
'
a
'
'
b
'
'
c
'
]
list.each { elem 
->
  println elem
}
运行结果:

a
b
c

遍历map

def map 
=
 [name:
"
山风小子
"
, address:
"
Shanghai
"
]
map.each { key, value 
->
  println 
"
$key : $value
"
}
运行结果:

name : 山风小子
address : Shanghai

eachWithIndex

带index的each

def list 
=
 [
'
a
'
'
b
'
'
c
'
]
list.eachWithIndex { elem, i 
->
  println 
"
$i : $elem
"
}
运行结果:

0 : a
1 : b
2 : c

any

只要存在一个满足条件(此例中的条件为elem.length() < 3)的element就返回true,否则返回false

def list 
=
 [
'
a
'
'
ab
'
'
abc
'
]
list.any { elem 
->
 
  elem.length() 
<
 
3
}
运行结果:

true

every

所有的element都满足条件才返回true,否则返回false

def list 
=
 [
'
a
'
'
ab
'
'
abc
'
]
list.every { elem 
->
 
  elem.length() 
<
 
3
}
运行结果:

false

grep

符合条件的element会被提取出来,形成一个list

条件以closure的形式传入

def list 
=
 [
'
a
'
'
ab
'
'
abc
'
]
list.grep { elem 
->
  elem.length() 
<
 
3
}
运行结果:

["a", "ab"]

条件以regex的形式传入,符合regex的element被提取出来形成一个list

def list 
=
 [
'
a
'
'
ab
'
'
abc
'
]
list.grep(
~/
..
/
)
运行结果:

["ab"]

条件以collection的形式传入,在collection中的element被提取出来形成一个list,可以看作求两个collection的交集

def list 
=
 [
'
a
'
'
ab
'
'
abc
'
]
list.grep([
'
a
'
'
cde
'
'
ab
'
])
运行结果:

["a", "ab"]

join

用指定的字符连接collection中的element

def list 
=
 [
2007
8
26
]
list.join(
'
-
'
)
运行结果:

2007-8-26

sort

根据指定条件进行排序

def list 
=
 [
2007
8
26
]
list.sort { e1, e2 
->
  
return
 e1 
-
 e2
}
运行结果:

[8, 26, 2007]

find

查找collection中满足条件的‘第一个’element

def list 
=
 [
2007
8
26
]
list.find { elem 
->
  elem 
<
30
}
运行结果:

8

findAll

查找collection中满足条件的‘所有’element

def list 
=
 [
2007
8
26
]
list.findAll { elem 
->
  elem 
<
 
30
}
运行结果:

[8, 26]

collect

对collection的element进行处理,并将处理结果放到一个新的collection中

def list 
=
 [
'
a
'
'
b
'
'
c
'
]
list.collect { elem 
->
  elem 
*
 
2
}
运行结果:

["aa", "bb", "cc"]

对map进行处理

def map 
=
 [name:
'
山风小子
'
, address:
'
Shanghai
'
]
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()
}
运行结果:

[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 
"
}
运行结果:

I love  you 

reverse

将collection中各element的次序颠倒一下

def list 
=
 [
'
a
'
'
b
'
'
c
'
]
list.reverse()
运行结果:

["c", "b", "a"]

颠倒字符串

def list 
=
 
'
abc
'
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()
运行结果:

["a", "b", "c"]


max

求最大值

def list 
=
 [
1
2
3
]
list.max()
运行结果:

3

按指定的比较内容(此例的比较内容为长度length),在collection中选出最大的element

def list 
=
 [
'
a
'
'
ab
'
'
abc
'
]
list.max { elem 
->
  elem.length()
}

min与max类似,求最小值,再次就不演示用法了,用法与max相同,将上述代码中的max改为min即可


count

计数

def list 
=
 [
'
a
'
'
ab
'
'
a
'
]
list.count(
'
a
'
)
运行结果:

2

对字符串"aaba"中的a进行计数

def list 
=
 
"
aaba
"
list.count(
'
a
'
)
运行结果:

3

sum

求和

def list 
=
 [
1
2
3
]
list.sum()
运行结果:

6

求字符串的‘和’,其实就是连接字符串

def list 
=
 [
'
a
'
'
b
'
'
c
'
]
list.sum()
运行结果:

abc

转载地址:http://pcfob.baihongyu.com/

你可能感兴趣的文章
Java编程思想学习笔记(12)
查看>>
Java-8-UnaryOperator
查看>>
Java-8-Function
查看>>
Java-8-Stream接口
查看>>
Junit4入门
查看>>
Java与算法(11)
查看>>
Java与算法(13)
查看>>
Python时间模块
查看>>
Python的闭包和装饰器
查看>>
Python基于Socket实现简单聊天室
查看>>
Python的Twisted入门
查看>>
Flask-Migrate实现数据库迁移
查看>>
shell切换用户
查看>>
session机制详解
查看>>
《算法导论》学习总结——第二部分1堆排序
查看>>
强大的g++呢还是强大的C++?太假了吧
查看>>
C++中的函数指针的一些总结
查看>>
ubuntu下为postgresql添加ODBC驱动过程
查看>>
Argument of type '(Foo::)(int,int)' does not match 'void (*)(int,int)'以及静态函数问题
查看>>
今天遇到的postgresql中的备份和恢复
查看>>