Groovy~Groovy的List(列表)操作
一、列表方法
- add():将新值附加到此列表的末尾
- contains():如果此列表包含指定的值,则返回true
- get():返回此列表中指定位置的元素
- isEmpty():如果此列表不包含元素,则返回true
- minus():创建一个由原始元素组成的新列表,而不是集合中指定的元素
- plus():创建由原始元素和集合中指定的元素组成的新列表
- pop():从此列表中删除最后一个项目
- remove():删除此列表中指定位置的元素
- reverse():创建与原始列表的元素相反的新列表
- size():获取此列表中的元素数
二、基础造作
定义List
def List = [a, b, c]
数组类型
List.getClass()
数组长度
List.size()
复制数组
def 新List = new ArrayList<List内元素类型>(原List)
def 新List= 原List.clone()
判断是否为空
List.empty
class FirstTest{static void main(String[] args) {// 定义数组def listTest = ["小红", "小蓝", "小明"]println listTest.empty // false// 数组类型println listTest.getClass() // class java.util.ArrayList// 数组长度println listTest.size() // 3// 复制数组def listTest1 = new ArrayList<String>(listTest)println listTest // [小红, 小蓝, 小明]def listTest2 = listTest1.clone()println listTest2 // [小红, 小蓝, 小明]}
}
三、List查看元素
查看整个列表
List
查看单个元素
List[i]
:获取List中索引为i的元素,可以使用负数索引List.getAt(i)
:获取List中索引为i的元素,可以使用负数索引List.get(i)
:获取List中索引为i的元素,不能使用负数索引
class FirstTest{static void main(String[] args) {def listTest = ["小红", "小蓝", "小明"]// 索引是从0开始的println listTest[1] // 小蓝println listTest[-1] // 小明println listTest.getAt(1) // 小蓝println listTest.getAt(-1) // 小明println listTest.get(1) // 小蓝
// println listTest.get(-1) // !!报错}
}
四、List修改元素
List[i] = x
:将List中索引为i的元素更改为xList.putAt(i,x)
:将List中索引为i的元素更改为xList.set(i, x)
:将List中索引为i的元素更改为x并返回原值
class FirstTest{static void main(String[] args) {def listTest = ["小蓝", "小红", "小明"]println listTest // [小蓝, 小红, 小明]listTest[1] = "小飞"println listTest // [小蓝, 小飞, 小明]listTest.putAt(0, "小花")println listTest // [小花, 小飞, 小明]println listTest.set(2,"小赵") // 小明println listTest // [小花, 小飞, 小赵]}
}
五、List迭代
List.each{执行语句}
List.each{变量名称 -> 执行语句}
List.eachWithIndex{变量名称, 索引 -> 执行语句}
class FirstTest{static void main(String[] args) {def listTest = ['小明', '小蓝', '小红']// each只有元素listTest.each{// it是对应当前元素的隐式参数println it}listTest.each{student ->println student}// eachWithIndex有元素和索引listTest.eachWithIndex{ student, i ->println i + ": " + student }}
}
List.collect{执行语句}
class FirstTest{static void main(String[] args) {def num = [1,2,3]println num.collect() // [1, 2, 3]println num.collect{ it * 2} // [2, 4, 6]println num*.multiply(2) // [2, 4, 6]println num.collect{ it.multiply(2) } // [2, 4, 6]// 可以给collect传入list参数,收集元素的列表def list = [0]println num.collect(list){it * 2} // [0, 2, 4, 6]}
}
六、List查找和过滤
查找
List.find{条件}
:找到第一个符合条件的元素List.findAll{条件}
:找到所有符合条件的元素List.findIndexOf{条件}
:找到第一个符合条件元素的索引
class FirstTest{static void main(String[] args) {// 找出第一个符合条件的元素println ([1,2,3].find{ it > 1 })// 找到所有符合条件的元素println ([1,2,3].findAll{ it > 1 })// 找到符合条件的第一个元素的indexprintln (['a', 'b', 'c', 'd', 'e'].findIndexOf{it in ['c', 'e', 'g']})} }
索引
List.indexOf{条件}
:返回第一个符合条件的索引List.lastIndexOf{条件}
:返回最后一个符合条件的索引
class FirstTest{static void main(String[] args) {// 返回indexprintln(['a','b','c','d','c'].indexOf('c'))// index返回-1意味着没有找到结果println(['a','b','c','d','c'].indexOf('z'))// 返回最后一个索引println(['a','b','c','d','c'].lastIndexOf('c'))} }
判断
List.every{条件}
:如果List中每一个元素都符合条件就返回true,否则为falseList.any{条件}
:如果List中有一个元素符合条件就返回true,否则为false
class FirstTest{static void main(String[] args) {// 如果每一个元素都符合条件则返回trueprintln([1,2,3].every{ it < 5 })println(![1,2,3].every{ it < 3 })// 如果有一个元素符合条件就返回trueprintln([1,2,3].any{ it > 2 })println(![1,2,3].any{ it > 3 })} }
求和
List.sum{条件}
:将List中所有元素相加
class FirstTest{static void main(String[] args) {// 所有元素求和println([1,2,3,4,5,6].sum())// 求和的时候可以自定义元素的值println(['a','b','c','d','e'].sum{it == 'a' ? 1 : it == 'b' ? 2 : it == 'c' ? 3 : it == 'd' ? 4 : it == 'e' ? 5 : 0})println(['a','b','c','d','e'].sum{((char) it) - ((char) 'a')})println(['a','b','c','d','e'].sum())println([['a','b'],['c','d']].sum())// 可以提供初始值println([].sum(1000))println([1,2,3].sum(1000))} }
其他
List.join(分隔符)
:将List以分隔符连接List.inject(初始值){条件}
:将List以指定条件和初始值进行连接
class FirstTest{static void main(String[] args) {// 每个元素之间添加字符串println([1,2,3].join('-'))// 减少操作println([1,2,3].inject('counting: '){str, item -> str + item})println([1,2,3].inject(0){ count, item -> count + item})} }
极值
List.max()
:求List中元素的最大值List.min()
:求List中元素的最小值
class FirstTest{static void main(String[] args) {// 最大值println([9,4,2,10,5].max())// 最小值println([9,4,2,10,5].min())// 单字符最大值和最小值println(['x','y','a','z'].min())// 用闭包描述元素的大小def list = ['abc','z','xyzuvw','hello','321']println(list.max{it.size()})println(list.min{it.size()})} }
class FirstTest{static void main(String[] args) {Comparator mc1 = {a, b -> a == b ? 0 : (a < b ? -1 : 1)}def list = [7,4,9,-6,-1,11,2,3,-9,2,5,-13]println list.max(mc1)println list.min(mc1)Comparator mc2 = { a, b -> a == b ? 0 : (Math.abs(a) < Math.abs(b)) ? -1 : 1}println list.max(mc2)println list.min(mc2)println list.max({a,b -> a.equals(b) ? 0 : Math.abs(a) < Math.abs(b) ? -1 : 1})println list.min({a,b -> a.equals(b) ? 0 : Math.abs(a) < Math.abs(b) ? -1 : 1})} }
七、增加元素
List << x
:将x添加到List中List.leftShift(x)
:将x添加到List中,等价<<
class FirstTest{static void main(String[] args) {// 定义一个空Listdef list = []println list // []// 向List中添加一个元素list << 5println list // [5]// 向List添加多个元素list << 7 << 'i' << 11println list// 向List添加Listlist << [1,2]println list// 在表达式最前端的是目标Listprintln ([1,2] << 3 << [4,5] << 6)// leftShift等价于<<println ([1,2].leftShift(3))}
}
List1+List2
:将List1和List2合并List+x
:将x添加到List中(会生成一个新的列表)List.plus(x)
:将x添加到List中
class FirstTest{static void main(String[] args) {println ([1,2] + 3 + [4,5] + 6) // [1, 2, 3, 4, 5, 6]// 等价于调用plus方法println([1,2].plus(3).plus([4,5]).plus(6)) // [1, 2, 3, 4, 5, 6]def a = [1,2,3]a += 4a += [5,6]println a // [1, 2, 3, 4, 5, 6]}
}
class FirstTest{static void main(String[] args) {println ([1,*[222,333],456]) // [1, 222, 333, 456]println ([*[1,2,3]]) // [1, 2, 3]println ([1,[2,3,[4,5],6],7,[8,9]].flatten()) // [1, 2, 3, 4, 5, 6, 7, 8, 9]}
}
List.add(x)
:将x插入到List中List.add(i,x)
:将x插入到List中索引为i的位置List1.addAll(List2)
:将List2中的元素都插入到List1中List.addAll(i,List2)
:将List2中的元素插入到List1中索引为i的位置
class FirstTest{static void main(String[] args) {def list = [1,2]list.add(3)list.addAll([5,4])println list // [1, 2, 3, 5, 4]list = [1,2]list.add(1,3)println list // [1, 3, 2]list.addAll(2,[5,4])println list // [1, 3, 5, 4, 2]}
}
List[i] = x
:将x插入到List中索引为i的位置,根据需要使列表增长,空值为null
class FirstTest{static void main(String[] args) {def list = [0,1,2,3]list[5] = 5println list // [0, 1, 2, 3, null, 5]}
}
八、删除元素
List1-x
:删除List中所有x元素List1-List2
:删除List1里面所有List2中的元素
class FirstTest{static void main(String[] args) {println (['a','b','c','b','b'] - 'c') // [a, b, b, b]println (['a','b','c','b','b'] - 'b') // [a, c]println (['a','b','c','b','b'] - ['b','c']) // [a]def list = [1,2,3,4,3,2,1]// 从原始list创建一个新的list,并删除元素3list -=3println list // [1, 2, 4, 2, 1]println list-=[2,4] // [1,1]}
}
List.remove(i)
:删除List索引为i的值,并返回这个元素List.remove(x)
:删除List中x元素,只删除第一个
class FirstTest{static void main(String[] args) {def list1 = [1,2,3,4,5,6,2,2,1]// 删除第三个元素并返回第三个元素的值println list1.remove(2) // 3println list1 // [1, 2, 4, 5, 6, 2, 2, 1]def list2 = ['a','b','c','b','b']// 删除元素'c'如果成功返回trueprintln list2.remove('c') // true// 删除第一个找到的元素'b',如果删除成功返回trueprintln list2.remove('b') // true// 返回false,因为没有任何元素删除println list2.remove('z') // falseprintln list2 // [a,b,b]}
}
List.clear()
:删除List中所有元素
class FirstTest{static void main(String[] args) {def list = [1,2,3]list.clear()println list // []}
}
九、其他操作
x in List
:如果x在List中返回trueList.contains(x)
:如果List包含x返回trueList1.containsAll([List2])
:如果List2中的每个元素都在List1中返回trueList.count(x)
:判断x在List中的数量List.count{条件}
:判断List中符合条件的元素的数量List1.intersect(List2)
:判断List1和List2的交集List1.disjoint(List2)
:如果List1和List2互斥返回true
class FirstTest{static void main(String[] args) {// 如果元素'a'在list中返回trueprintln 'a' in ['a','b','c'] // true// 等价于java中的contains方法println (['a','b','c'].contains('a')) // true// containsAll将检测每一个元素,如果都包含在list中就返回trueprintln ([1,3,4].containsAll([1,4])) // true// 返回元素3在列表中包含的数量println ([1,2,3,3,3,3,4,5].count(3) == 4) // true// 返回符合断言的元素在列表中包含的数量println ([1,2,3,3,3,3,4,5].count{it%2==0}) // 2// 返回两个列表的交集println ([1,2,4,6,8,10,12].intersect([1,3,6,9,12])) // [1, 6, 12]// 两个列表是互斥的,返回trueprintln ([1,2,3].disjoint([4,6,9])) // trueprintln (![1,2,3].disjoint([2,4,6])) // true}
}
十、排序
List.sort()
:返回List从小到大排序后的结果List.sort{条件}
:将List按照条件排序Collections.sort(List)
:将List进行排序Collections.sort(List,闭包)
:将List通过闭包进行排序
class FirstTest {static void main(String[] args) {println([6, 3, 9, 2, 7, 1, 5].sort())println(['abc', 'z', 'xyzuvw', 'Hello', '321'].sort { it.size() })println([7, 4, -6, -1, 11, 2, 3, -9, 5, -13].sort {a, b -> a == b ? 0 : Math.abs(a) < Math.abs(b) ? -1 : 1})def list = [6, -3, 9, 2, -7, 1, 5]Collections.sort(list)println listdef mc = {a, b -> a == b ? 0 : Math.abs(a) < Math.abs(b) ? -1 : 1}Collections.sort(list, mc)println list}
}
十一、复制元素
List*n
:将List复制n倍List.multiply(n)
:将List复制n倍Collections.nCopies(n,'x')
:将x复制为n倍
class FirstTest{static void main(String[] args) {println ([1,2,3] * 3)println ([1,2,3].multiply(2))println Collections.nCopies(3, 'b')println Collections.nCopies(2,[1,2])}
}
十二、分组
List.groupBy{条件}
:将List按照条件分组
class FirstTest{static void main(String[] args) {println (['a', 7, 'b', [2,3]].groupBy{it.class})}
}
Groovy~Groovy的List(列表)操作相关推荐
- Groovy~Groovy介绍
一.什么是Groovy Groovy的官方网站 Groovy是一种基于Java平台的面向对象语言 二.Groovy的特点 同时支持静态和动态类型 支持运算符重载 本地语法列表和关联数组 对正则表达式的 ...
- python列表操作:追加元素到列表的代码
将做工程过程中常用的内容做个收藏,如下的内容是关于python列表操作:追加元素到列表的内容. scores = ["1","2","3"] ...
- 轻量函数式 JavaScript:八、列表操作
你在前一章闭包/对象的兔子洞中玩儿的开心吗?欢迎回来! 如果你能做很赞的事情,那就反复做. 我们在本书先前的部分已经看到了对一些工具的简要引用,现在我们要非常仔细地看看它们,它们是 map(..).f ...
- python编程实例详解-Python编程之列表操作实例详解【创建、使用、更新、删除】...
这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋友可以参考下 #coding=utf8 ''''' 列表类型也 ...
- Erlang列表操作里面的变量绑定规则
2019独角兽企业重金招聘Python工程师标准>>> 原文如下: The scope rules for variables which occur in list compreh ...
- Python学习(四)列表与列表操作
读取列表 列表:由一系列按特定顺序排列的元素组合.Python中使用"[]"表示列表 bicycles = ['trek','cannondale','redline','spec ...
- python列表操作函数大全_Python列表操作函数
列表可以进行多个数据的存储,同时python中的列表设计非常到位,它可以实现内容动态扩充,可以进行后期数据的删除,这些就需要通过Python提供的列表操作函数来实现了. 对于Python语言而言,开发 ...
- 【Python基础】零基础学习Python列表操作
作者:来自读者投稿 整理:Lemon 出品:Python数据之道 " 「Python数据之道」导读:本文来自读者投稿,Python数据之道早些时候也发过 Python 列表相关的文章,可以前 ...
- 获取用户列表为空_Python中最常见的10个列表操作
列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,这篇文章列出了10个常用的列表操作,希望对你有帮助. 1.迭代列表时如何访问列表下标索引 普通版: 优雅版: en ...
- 开发基础(字符编码、列表操作)
一.字符编码 计算器所认识的编码都是二进制编码 二进制与十进制转换 计算机最开始使用的编码是美国的 ASCll编码 计算机容量单位 字符编码 python2.x 默认编码使用的是ASCll pytho ...
最新文章
- invalidate()源码分析
- NTU 课程笔记: 网络流
- 从博客时间轴总结这一年
- javax.script.ScriptException: ReferenceError: xxx is not defined in eval
- 【转】C#中枚举类型与静态变量
- 吴恩达《机器学习》学习笔记二——单变量线性回归
- python抓有趣的东西_Python 五个有趣的彩蛋,你都知道吗?
- 微信公众号开发之微信买单
- iOS开发之跳转指定的tabbar控制器(二级页面跳转到指定的tabbar页面)
- git cherry-pick合并某个commit
- react15源码简析(分享PPT)
- H264--H264编码--4
- 安徽科技学院 信网学院网络文化节 陈鑫鑫
- 5年码农吐血推荐10款用了就离不开的网站
- Hadoop之MapReduce02【自定义wordcount案例】
- 浏览器渲染机制、重排、重绘
- 【转载】如何用Python发送Email邮件?
- getenv、setenv函数(获取和设置系统环境变量) 与 环境变量
- R语言在线地图神器:Leaflet for R包(三) 符号标记
- 演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)