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],5,8],6,9]] == [List1,List3].transpose()
有一点需要注意的是,如果List的长度不一,则取最短的长度:
def List4 = [1,1,1]def List5 = [2,2]assert [[1,2],[1,2]] == [List4,List5].transpose()
inject()方法遍历集合,第一次将传递的值和集合项目传给闭包,将处理结果作为传递的值,和下一个集合项目传给闭包,依此类推
def List = [1,2,3]result = List.inject(0){s,l -> s += l }assert 6 == result
def List = ['like','groovy']result = List.inject('I'){s,l -> "$s $l" }assert "I like groovy" == result
两个方法 结合使用举例,假设我们有两个List,分别是a和b,a和b的长度相同,现在我们想把a的每个元素作为key,b中对应的元素作为value,构造一个Map:
def a = [1,3]def b = [4,6]def m = [a,b].transpose().inject([:]) { s,l -> s + [(l[0]): l[1]] }assert m == [1: 4,2: 5,3: 6]总结
以上是内存溢出为你收集整理的【Groovy】List对象的transpose和inject方法的使用全部内容,希望文章能够帮你解决【Groovy】List对象的transpose和inject方法的使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)