Groovy Tip 21 魔幻数组 一
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Groovy语言作为一种敏捷性的语言,我们在集合类型的操作上已经见识到了它在编码方面敏捷的许多方面。比如,集合对象的声明、初始化、赋值和类似于“each”、“collect”等方法。这已经让我们大大惊叹于Groovy语言对于集合类对象操作的方便的魔力,但是,Groovy语言没有只停留在这些方面,而是进一步为我们提供了操作数组和List对象的更多的便利。这就是我们《魔幻数组》系列文字所要谈到的。
首先要谈到的是“join”方法,我们都知道,在Java编程中,如果我们有了如下的一个数组:
String[] strs = new String[]{"a","b","c","d"};
我们想将这个数组的元素用“,”连接成一个字符串,就得如下编码:
StringBuffer sb = new StringBuffer();
for(int i=0;i<strs.length;i++)
{
sb.append(strs[i]);
sb.append(",");
}
String str = sb.toString();
str = str.substring(0,str.length()-1);
System.out.println(str);
当然,输出结果为:
a,b,c,d
而我们在Groovy语言中就不用这么麻烦了,只需要使用“join”方法就行,如下:
def list1 = ['a','b','c','d']
println list1.join(',')
打印结果为:
a,b,c,d
当然了,你可能还有更高的要求,比如,只想连接list1对象中的第二和第三个元素,怎么办?
println list1[1,-2].join(',')
可以看到,我们只需要指出所需要连接的元素下标即可。打印结果为:
b,c
如果我们有两个数组,现在需要把两个数组的元素合并起来,在Java语言中,大家很快就会想起List接口的“addAll”方法,这个方法也的确很好用。
在Groovy语言中,也有很多方法来实现上面的功能,而且都不比“addAll”方法来得差呢,下面我们就来看看一些例子。
首先是“flatten”方法,假如我们已经有了两个数组,如下:
def list1 = ['a','b','c','d']
def list2 = ['e','f']
现在我们需要把这两个数组的元素合并起来,组成一个新的数组:
def list3 = [list1,list2].flatten()
println list3
打印结果为:
["a", "b", "c", "d", "e", "f"]
是不是不比Java语言中的“addAll”方法差。当然了,有人会说,这也不比“addAll”方法强。是的,我们承认。但是,在Groovy语言中,还有比“addAll”方法强的。如下:
def list4 = list1+list2
println list4
是的,在Groovy语言,我们可以直接把数组对象相加,从而达到上面的目的,这就比“addAll”方法简单了。上面代码的打印结果为:
["a", "b", "c", "d", "e", "f"]
当然了,有了加,我们很快就会想到减,那么数组相减会是什么结果呢?
def list6 = [ 1, 1, 2, 2, 3, 3, 3, 5 ]
def list7 = list6-[1,3]
println list7
结果为:
[2, 2, 5]
从上面的结果可以看出,数组相减的结果是将被减数组中所有的相减数组的元素去掉,形成新的数组。
我们不妨再把思路扩展,有了加和减,再往下考虑的就是乘了,我们的数组做乘法会是一个什么样的结果呢?
def list8 = ['a','b']
println list8*2
结果为:
["a", "b", "a", "b"]
这就不用我多解释了,看到了结果,你就会知道数组的乘法是怎么回事了。