一、列表方法

  • 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的元素更改为x
  • List.putAt(i,x):将List中索引为i的元素更改为x
  • List.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,否则为false
    • List.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中返回true
  • List.contains(x):如果List包含x返回true
  • List1.containsAll([List2]):如果List2中的每个元素都在List1中返回true
  • List.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(列表)操作相关推荐

  1. Groovy~Groovy介绍

    一.什么是Groovy Groovy的官方网站 Groovy是一种基于Java平台的面向对象语言 二.Groovy的特点 同时支持静态和动态类型 支持运算符重载 本地语法列表和关联数组 对正则表达式的 ...

  2. python列表操作:追加元素到列表的代码

    将做工程过程中常用的内容做个收藏,如下的内容是关于python列表操作:追加元素到列表的内容. scores = ["1","2","3"] ...

  3. 轻量函数式 JavaScript:八、列表操作

    你在前一章闭包/对象的兔子洞中玩儿的开心吗?欢迎回来! 如果你能做很赞的事情,那就反复做. 我们在本书先前的部分已经看到了对一些工具的简要引用,现在我们要非常仔细地看看它们,它们是 map(..).f ...

  4. python编程实例详解-Python编程之列表操作实例详解【创建、使用、更新、删除】...

    这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋友可以参考下 #coding=utf8 ''''' 列表类型也 ...

  5. Erlang列表操作里面的变量绑定规则

    2019独角兽企业重金招聘Python工程师标准>>> 原文如下: The scope rules for variables which occur in list compreh ...

  6. Python学习(四)列表与列表操作

    读取列表 列表:由一系列按特定顺序排列的元素组合.Python中使用"[]"表示列表 bicycles = ['trek','cannondale','redline','spec ...

  7. python列表操作函数大全_Python列表操作函数

    列表可以进行多个数据的存储,同时python中的列表设计非常到位,它可以实现内容动态扩充,可以进行后期数据的删除,这些就需要通过Python提供的列表操作函数来实现了. 对于Python语言而言,开发 ...

  8. 【Python基础】零基础学习Python列表操作

    作者:来自读者投稿 整理:Lemon 出品:Python数据之道 " 「Python数据之道」导读:本文来自读者投稿,Python数据之道早些时候也发过 Python 列表相关的文章,可以前 ...

  9. 获取用户列表为空_Python中最常见的10个列表操作

    列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,这篇文章列出了10个常用的列表操作,希望对你有帮助. 1.迭代列表时如何访问列表下标索引 普通版: 优雅版: en ...

  10. 开发基础(字符编码、列表操作)

    一.字符编码 计算器所认识的编码都是二进制编码 二进制与十进制转换 计算机最开始使用的编码是美国的 ASCll编码 计算机容量单位 字符编码 python2.x 默认编码使用的是ASCll pytho ...

最新文章

  1. invalidate()源码分析
  2. NTU 课程笔记: 网络流
  3. 从博客时间轴总结这一年
  4. javax.script.ScriptException: ReferenceError: xxx is not defined in eval
  5. 【转】C#中枚举类型与静态变量
  6. 吴恩达《机器学习》学习笔记二——单变量线性回归
  7. python抓有趣的东西_Python 五个有趣的彩蛋,你都知道吗?
  8. 微信公众号开发之微信买单
  9. iOS开发之跳转指定的tabbar控制器(二级页面跳转到指定的tabbar页面)
  10. git cherry-pick合并某个commit
  11. react15源码简析(分享PPT)
  12. H264--H264编码--4
  13. 安徽科技学院 信网学院网络文化节 陈鑫鑫
  14. 5年码农吐血推荐10款用了就离不开的网站
  15. Hadoop之MapReduce02【自定义wordcount案例】
  16. 浏览器渲染机制、重排、重绘
  17. 【转载】如何用Python发送Email邮件?
  18. getenv、setenv函数(获取和设置系统环境变量) 与 环境变量
  19. R语言在线地图神器:Leaflet for R包(三) 符号标记
  20. 演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)

热门文章

  1. deepin15.11 下载软件Aria2 全局配置方法
  2. UID GID 说明及例子
  3. 黑客攻击-木马程序(2)
  4. 垃圾收集器G1和ZGC详解
  5. 中国计算机水平低是因为工程水平差
  6. 商店管理系统的设计与实现
  7. Linux帮助使用方法
  8. js中国标准时间转换为yyyy-MM-dd
  9. NOI大纲正式发布:全国青少年信息学奥林匹克系列竞赛大纲
  10. SOA 微服务 RPC WebService Soap关系详解