Groovy 1.8 新特性: Diamond operator 以及 DGM
Diamond OperatorGroovy 作为 jvm 世界的皇储,自然和 Java 的关系非同一般。对于即将揭开面纱的 JDK 7 而言,Groovy 将在 1.9 版本中提供语言级别的对应。但是,有一个 JDK 7 的新特性在 Groovy 1.8 版本就提前实现了,那就是 Diamond Operator: 1: // old school: 2: List> list2 = new ArrayList<>() 3: // Diamond operator: 4: List> list2 = new ArrayList<>() 嗯,怎么说呢。我想除非是用 Groovy++,否则在 Groovy 代码中,这个操作的意义并不是很大。连同其它 JDK 7 的新特性也是,比如 strings in switch 之类,都可以在 Groovy 本身的特性中找到。所以,除非你奋战在非常底层的代码中,否则我实在想不出这个钻石操作符有啥实际用途。 飞叔:唉,虽然被叫了十几年,昨天一自称飞哥还是被美女吐槽了。所以虽然目前还是很年轻,我依然决定还是自称飞叔 新的 DGM 方法DGM,也就是 DefaultGroovyMethods,是利用 Groovy 的元编程能力注入到普通类中的方法。 在 count 中使用闭包以前需要先 findAll 再进行size 计算的过程,现在可以用带有闭包的 count 完成: 1: // 0到99间奇数的数量
2: assert (0..99).count { it % 2 } == 50 分组计数:countBy该方法会将 collection 中的成员代入闭包,并根据闭包返回值进行分组,输出每组的计数 1: assert (1..99).countBy { it % 2 } == [0: 49,1:50]
将元素插入 collection 的指定位置 1: assert [1,'a','b','c',2] == [1,2].plus(1,'c')
注意,在这里,index 不可以取负数来试图从尾部插入元素。另外,字符串可以以列表的形式访问,但却无法以该形式使用 plus。 对 Set 和 Map 中的数字进行比较现在开始,在 Set 和 Map 中,数字的比较将更有弹性,不同类型的数字如果值相同即视为相同。 2: assert [a: 1] == [a: 1L]
toSet 方法可以通过 toSet 将数组(仅支持原生型别)、字符串和集合转变为 Set 1: assert [2,1,2].toSet() == ([1,2,1] as int[]).toSet()
2: assert 'live dog'.toSet() == 'evil god'.toSet() Map 的 min/max 闭包方法 1: map = [a: 1,bbb: 2,cc: 3,dddd: 2]
2: assert map.max { it.key.size() }.key == 'dddd' 3: assert map.min { it.value }.value == 1 该方法也被补充到了最近的 1.7 版本 Map 的 withDefault 方法 1: pets = [:].withDefault { 'cat' }
2: assert pets.best == 'cat' 3:?
4: names = [:].withDefault { it.toUpperCase() }
5: assert 'HIARCS' == names.hiarcs 飞叔:withDefault 方法是以上这些 DGMs 中最令我兴奋的一点,利用这个方法,可以节约大量的 map 内容初始化代码,以后做起以 Map 为基础的分组算法就要方便多了。
Technorati Tags:
Groovy 1.8 新特性
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |