假设我们有这样两个List:
def list1 = [1, 2, 3]
def list2 = [4, 5, 6]
我们需要检查是否第二个List的每个元素都比第一个List的对应元素大,最直接的想法是,迭代第一个List,然后通过下标访问第二个List:
def result = true
list1.eachWithIndex { n, i ->
if (n >= list2[i]) result = false
}
assert result
然而,这种方法不够直观,而且无法利用GDK本身提供的every方法。
实际上,我们可以利用
Collection.transpose()方法来实现:
assert [list1, list2].transpose().every { a, b ->
a < b
}
transpose()方法实际上就是数学中矩阵的转置,简单的来说就是行和列的交换:
assert [[1, 4], [2, 5], [3, 6]] == [list1, list2].transpose()
transpose()不止可以用于两个List,还能用于多个List。譬如,我们有第三个List:
def list3 = [7, 8, 9]
我们可以这样检查是否满足“list3 > list2 > list1”(每个对应的元素):
assert [list1, list2, list3].transpose().every { a, b, c ->
a < b && b < c
}
assert [[1, 4, 7], [2, 5, 8], [3, 6, 9]] == [list1, list2, list3].transpose()
有一点需要注意的是,如果List的长度不一,则取最短的长度:
def list4 = [1, 1, 1]
def list5 = [2, 2]
assert [[1, 2], [1, 2]] == [list4, list5].transpose()
以上代码在Groovy 1.5.7下测试通过。
分享到:
相关推荐
Groovy 学习笔记 Groovy 学习笔记
Groovy
学Groovy,Grails 与学Java一样,在实战之前需要搭建开发环境,您可以在 Groovy轻松入门--搭建Groovy开发环境 学习到如何搭建Groovy环境,之后我会讲一下如何搭建Grails环境,然后手把手地写个Demo程序告终,我还会...
Groovy学习笔记,内容如下: 1.概念 2.基本语法 3.字符串 4.集合 5.类和闭包 6.控制语句 7.操作符重载 8.I/O操作 9.高级应用 10.正则表达式
对Groovy开发环境设置,基本语法做了简单明了的介绍
图文并茂,适合入门新手,涵盖了基本的语法讲解及一些DEMO测试,值得一看
NULL 博文链接:https://rsljdkt.iteye.com/blog/859059
第1章 数字和字符串 第2章 List的简单介绍 第3章 String的特殊用法 第4章 闭包 第5章 集合+闭包 第6章 Map和Range 第7章 函数
Groovy语法&Gradle配置学习笔记
Groovy_笔记
NULL 博文链接:https://key232323.iteye.com/blog/1336400
Grails Groovy 学习必备参考资料
很好的学习Groovy的学习资料, 很实用。。 个人感觉Groovy是Java敏捷开发的首选。
Groovy学习资料-中文.rar。Groovy学习资料。Grails学习资料。mht网页格式。
适合想了解groovy 编程开发的人员 Groovy - hellworld Groovy - 变量 Groovy - 静态import Groovy - 字符串 Groovy - 分支结构语句 Groovy - 循环结构语句
groovy学习大礼包,包括groovy用户指南,groovy解惑,Groovy轻松入门
网络红文 实战gradle,android,java开发人员的必修课
groovy环境的mock工具,用于辅助单元测试.
NULL 博文链接:https://xiajs.iteye.com/blog/1871551