天天看点

Groovy Tip 7 “<<”操作符

                          Groovy Tip 7 “<<”操作符   “<<”操作符在Java语言里被我们熟知的是位运算中的左移运算符。在Groovy语言里,它依然是左移运算符,这我们都很熟悉,在这里就不再多说。而我们要说的却是除此之外,在Groovy语言里为“<<”运算符新增的功能。 一.对List对象和Set对象的操作 对于List对象,在前面的文字里我们提到过:        def list = [ 'a' , 'b' , 'c' ]          list. each {        println it     }          println '-----------------------'        list<< 'e'        list<< 'f'        list<< "haha"               list. each {            println it     }   不错,我们在 Groovy 语言里,使用“ << ”运算符取代了 Java 语言中 List 类的 add 方法,带来了编码方面的简单和快捷。上面代码的输出结果为: a b c ----------------------- a b c e f haha   除了 List 对象外,“ << ”操作符同样能够 Set 对象提供 add 功能,请看下面的例子:        def set = [ 'a' , 'b' , 'c' ] as Set               set. each {            println it        }          println '-------------------------'        set<< 'i'        set<< 'j'        set<< 'b'               set. each {            println it     }   为Set对象add元素同样简单,下面是它的输出结果: a c b ------------------------- i a c j b   为了验证 Set 对象的特性,我特意给 set 对象多 add 了一个“ b ”字符串,最后打印的结果证明了 Set 对象的特性: 1. 没有顺序; 2. 没有重复的元素。   二.对StringBuffer对象的操作 在Java语言中,对StringBuffer对象的操作如下:        StringBuffer sb = new StringBuffer()        sb. append ( 'I can say my ' )        sb. append ( 'a' )        sb. append ( 'b' )        sb. append ( 'c' )            System.out. println (sb.toString())   打印结果为: I can say my abc   而 Groovy 语言中,同样是使用“ << ”操作符来对 append 方法进行简化的:        def sb = new StringBuffer()          sb<< 'I'        sb<< ' can say'        sb<< ' my a'        sb<< 'b'        sb<< 'c'            println sb.toString()   打印结果为: I can say my abc     三.对流对象的操作 在Java语言中,对流对象的操作通常是read和write,请看下面的例子:        try        {            OutputStreamWriter wtr= new OutputStreamWriter( new FileOutputStream( "TheOutput.txt" ));            wtr.write( "abc" );            wtr.close();        }        catch (Exception e)        {            e.printStackTrace();     }   而上面的例子在 Groovy 语言中将是下面的样子:        def wtr= new OutputStreamWriter( new FileOutputStream( 'TheOutput.txt' ))        wtr<< 'abc'     wtr.close()   不错,是使用“ << ”操作符代替了 write 方法。   四.其他 除了上面的一些对“<<”操作符的常用方法,在Groovy语言中,还有一些不常用的地方也会使用到“<<”操作符。请看下面的例子: class Empl {         String name     static void main(args) {               Empl.metaClass.nameInUpperCase << {-> delegate.name.toUpperCase() }        def b = new Empl(name: "Tom" )          println b.nameInUpperCase()             }   }   在这里,“ << ”操作符是赋值的意思,即将后面的闭包赋给 Empl.metaClass.nameInUpperCase 。整个语句与下面的语句等同:   Empl.metaClass.nameInUpperCase = {-> delegate.name.toUpperCase() }