Groovy Tip 15
“*”操作符
基于
Groovy
语言是一个敏捷的开发语言的观点,它在很多方面给我们提供编码的方便和高效性。“
*
”操作符便是其中的一个例子,它被淹没在
Groovy
语言的很多高效特性中,不为人轻易所知,但这却恰恰说明
Groovy
语言编程的敏捷性。下面,我们就来说一说“
*
”操作符。
先从一个简单的例子说起。
假设我们有如下的一个方法:
def
static
int
sum(
int
i,
int
j,
int
k)
{
return
i+j+k
}
现在,我们要调用这个方法。常规的调用如下:
sum(
1
,
2
,
3
)
通过“
*
”操作符,我们可以这样调用:
def
list = [
1
,
2
,
3
]
println
sum(*list)
我们再把例子复杂一点:
def
static
int
cal(
int
i,
int
j,
int
k,list)
{
return
i+j+k+list.
size
()
}
要调用上面的方法,我们可以:
def
list = [
1
,
2
,
3
]
println
cal(*list,[
1
,
2
,
7
])
由于
Groovy
的动态性,我们甚至可以:
def
list = [
1
,
2
,
3
,[
1
,
2
,
3
]]
println
cal(*list)
总之,有了“
*
”操作符,我们的多参数方法调用在写代码方面可以不用那么难受,可以先把所有的或部分的参数放在一个
List
对象里,然后把该对象传给方法。
除此之外,“
*
”操作符还有很多其他方面的用途,比如简化集合类的操作。下面也试图列举一些例子来说明。
我们现在有了一个
List
对象,如下
:
def
list1 = [
1
,
2
,
3
]
现在,我们需要一个新的
List
对象,它的元素部分由
list1
的元素组成。要实现这个目的,我们在
Java
语言的思路是这样的:
def
list2 = []
list2.addAll(list1)
list2<<
4
首先是要初始化一个新的
List
对象,然后使用
addAll
方法把
list1
的所有元素都赋给
list2
,然后再在
list2
中添加新的元素。
当然,在
Java
语言中,我们还有更简单的办法,这就是
clone
方法,如下:
def
list2 = list1.clone()
list2<<
4
首先把
list1
克隆一份赋给
list2
,然后给
list2
添加新的元素。
在
Groovy
语言中,我们使用“
*
”操作符,可以这样做:
def
list2 = [*list1,
4
]
这真是太简单了。
再举出一个例子,你就更感叹于“
*
”操作符的简单了。
现在,我们要创建一个
List
对象,它的元素由
1
到
20
的数字组成。在
Java
语言中,我们是这样做的:
List list =
new
ArrayList();
for
(
int
i=1;i<=20;i++)
{
list.add(i);
}
可以看到,十分的麻烦,需要使用
for
循环挨个赋值。
我们在
Groovy
语言中,只需要这样:
def
list = [*(
1
..
20
)]
除了
List
对象,“
*
”操作符同样也可以使用于
Map
对象:
def
map1 = [
'name'
:
'Tom'
,age:
19
]
def
map2 = [*:map1,
'addr'
:
'Shenzhen'
]