Groovy Tip 7 “<<”操作符
发布时间:2020-12-14 17:00:13  所属栏目:大数据  来源:网络整理 
            导读:????????????????????????? Groovy Tip 7 “”操作符 ? “”操作符在Java语言里被我们熟知的是位运算中的左移运算符。在Groovy语言里,它依然是左移运算符,这我们都很熟悉,在这里就不再多说。而我们要说的却是除此之外,在Groovy语言里为“”运算符新增的
                
                
                
            | 
  ????????????????????????? 
 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' 
 , 
 '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() } 
 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
