加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【Groovy】List对象的transpose和inject方法的使用

发布时间:2020-12-14 16:55:31 所属栏目:大数据 来源:网络整理
导读:transpose()方法实际上就是数学中矩阵的转置,简单的来说就是行和列的交换:? assert [[1,4],[2,5],[3,6]] == [list1,list2].transpose() transpose()不止可以用于两个List,还能用于多个List。譬如,我们有第三个List:? def list3 = [7,8,9] 我们可以这样

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]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读