【Groovy】List对象的transpose和inject方法的使用
2011-11-29 12:53
483 查看
transpose()方法实际上就是数学中矩阵的转置,简单的来说就是行和列的交换:
transpose()不止可以用于两个List,还能用于多个List。譬如,我们有第三个List:
我们可以这样检查是否满足“list3 > list2 > list1”(每个对应的元素):
有一点需要注意的是,如果List的长度不一,则取最短的长度:
inject()方法遍历集合,第一次将传递的值和集合项目传给闭包,将处理结果作为传递的值,和下一个集合项目传给闭包,依此类推
两个方法结合使用举例,假设我们有两个List,分别是a和b,a和b的长度相同,现在我们想把a的每个元素作为key,b中对应的元素作为value,构造一个Map:
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()
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, 2, 3] def b = [4, 5, 6] def m = [a, b].transpose().inject([:]) { s, l -> s + [(l[0]): l[1]] } assert m == [1: 4, 2: 5, 3: 6]
相关文章推荐
- list集合怎么转化成一个javaBean对象,及常见的使用方法(全)
- springMVC中使用List和Map绑定对象作为参数的使用方法
- 前台使用ajax 调用action方法,返回一个对象List集合的json
- List使用add方法添加对象问题
- 基于python list对象中嵌套元组使用sort时的排序方法
- groovy 的inject()方法使用简例
- Java中使用hql,sql查询返回的list<Object> 转成需要的实体对象--方法讲解!
- List使用add方法添加对象-只显示最后添加的数据的问题
- List对象remove方法的使用
- 05-常用对象API(集合框架-迭代器使用). 1 2 07-常用对象API(集合框架-List和Set的特点) 08-常用对象API(集合框架-List集合的常见方法) 1 2
- 使用 AddRange 方法将多个 ListItem 对象添加到集合
- [Groovy] List里的Inject方法
- JS 使用List<Object> 对象中的Object对象的某个属性的临时处理方法
- springMVC中使用List和Map绑定对象作为参数的使用方法
- 解决 ”不允许在查询中显式构造实体类型“问题及使用其他方法实现返回 List<Model对象>或者IQueryable<Model对象>对象
- Gson使用方法,json字段转List,转对象
- 请使用LinkedList来模拟一个队列(先进先出的特性): 1) 拥有放入对象的方法void put(Object o) 2)取出对象的方法Object get() 3)判断队列当中是否为空的方法b
- Java-List泛型的用处(能够使用传入泛型对象的方法)
- None用法+连接字符串优先使用join +用format而不是%+区别可变对象和不可变对象(list的深拷贝和浅拷贝)
- 面向对象——OOP(一)(落地法则、局部变量与全局变量、方法及重载、构造器及重载、代码块、内部类及匿名内部类、对象的创建与使用)