1       Lists

1.1  定义并访问Lists

List list = new List[].也可以使用泛型。访问list中的元素,可以使用list.get(i) or list[i]。

package list

class ListMapTest {

public static void main(args){

List<Integer> list = [1,2,3,4];

println list[2]

List<Person> persons = list[];

Person p = new Person("Jim","Knopf")

persons[0] = p

println persons.size()

println persons[0].firstName

println persons.get(0).firstName

}

}

输出:

Groovy也允许直接访问list中的元素。如下:

package list

class ListMapTest2 {

static main(args) {

List<Person> persons = new ArrayList<Person>();

persons[0] = new Person("Jim","Knopf")

persons[1] = new Person("Test","Test")

println persons.firstName

}

}

输出:

1.2  list与array互转

Groovy自动转换一个Array到一个List,反之亦然。如下:

package list

class List2array {

static main(args) {

def String[] strings = "This is a long sentence".split();

//转换Array为List

def List listStrings = strings;

//转换List为Array

def String[] arrayStrings = listStrings

println strings.class.name

println listStrings.class.name

println arrayStrings.class.name

}

}

输出:

1.3  List 方法

下边的list方法,非常有用

  • reverse()
  • sort()
  • remove(index)
  • findAll{closure} - returns all list elements for which the closure validates to true
  • first()
  • last()
  • max()
  • min()
  • join("string") 合并list中所有的元素,调用toString方法,并且连接到一起
  • << e 追加元素e到该list

grep 方法,用于过滤集合中指定的元素。

1.4  Operator overloading in Lists

List支持操作符重载。可以使用+来连接字符串,使用-来截取lists并且使用left-shift操作符来向list中增加元素。

1.5  Spreaddot 操作符

*. 分隔符,常被用来调用一个集合中的所有元素。操作的结果是另外一个集合对象。

package list

class SpreaddotTest {

static main(args) {

def list = ["Hello","Test","Lars"]

//计算list中的每个字符串元素的长度

def sizeList = list*.size()

assert sizeList == [5,4,4]

}

}

输出:

空,说明正确。

1.6  搜索list(find, findall and grep)

搜索方法:

  • findAll{closure} - returns all list elements for which the closure validates to true
  • find{closure} - returns the list element for which the closure validates to true
  • grep(Object filter) - Iterates over the collection of items and returns each item that matches the given filter - calling the Object#isCase. This method can be used with different kinds of filters like regular expressions, classes, ranges etc.

package list

class FindAndGrepTest {

static main(args) {

def l1 = ['test',12,20,true]

//检索Boolean类型的元素

assert[true] == l1.grep(Boolean)

//检索以G开头的元素

assert['Groovy'] == ['test','Groovy','Java'].grep(~/^G.*/)

//返回list中包含b和c的元素,注:['b', 'c'],是一个集合

assert ['b', 'c'] == ['a', 'b', 'c', 'd'].grep(['b', 'c'])

//返回在range内的元素

assert[14,16]==[5,14,16,75,12].grep(13..17)

//equal

assert[42.031] == [15,'Peter',42.031,42.032].grep(42.031)

//返回基于闭包的大于40的数

assert[50,100,300] == [10, 12, 30, 50, 100, 300].grep({it > 40})

}

}

11 Lists的更多相关文章

  1. java collections读书笔记(11) Lists

    继续这个系列,好久没学习了,懒惰呀. Set接口,实际上是collection 类别中最简单的一个接口,因为它并没有比Collection 接口增加任何的内容,相对而言,大家可能更喜欢List接口和它 ...

  2. Redis数据类型Strings、Lists常用操作指令

    Redis数据类型Strings.Lists常用操作指令 Strings常用操作指令 GET.SET相关操作 # GET 获取键值对 127.0.0.1:6379> get name (nil) ...

  3. Python命令 (if __name__=="__main__":)

    1. 语法 1.以#号开头的语句是注释 2.请务必注意,Python程序是大小写敏感的,如果写错了大小写,程序会报错. 3.按照约定俗成的管理,应该始终坚持使用4个空格的缩进. 4.当语句以冒号:结尾 ...

  4. 【IOS笔记】View Programming Guide for iOS -1

    原文:View Programming Guide for iOS View and Window Architecture Views and windows present your applic ...

  5. UNIX标准及实现

    UNIX标准及实现 引言     在UNIX编程环境和C程序设计语言的标准化方面已经做了很多工作.虽然UNIX应用程序在不同的UNIX操作系统版本之间进行移植相当容易,但是20世纪80年代UNIX版本 ...

  6. crontab 例子

    一个简单的 crontab 示例 0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.sh 在这个示例中,我们的命令在 7 月的每个星期五和星期六晚上 10 ...

  7. Client Dataset Basics

    文章出处:  http://www.informit.com/articles/article.aspx?p=24094 In the preceding two chapters, I discus ...

  8. Oracle 11gR2 rac 的各项服务说明

       安装结束后,会产生一些后台进程来确保集群正常工作并能够与外部通讯.其中的一些有序linux平台的要求需要以root用户权限来启动.比如,网络配置的改动就需要更高的权限.其他后台进程将以grid软 ...

  9. Laravel之备忘项(不定期更新)

    1.自定义字段验证错误信息 $this->validate($request, ['name' => 'required|max:50'], ['name.required' => ...

随机推荐

  1. #include <deque>

    deque \(deque\)头文件主要包括一个双端队列容器.是一个支持在两端插入两端删除的线性储存空间,与vector和queue相似.与\(vector\)比起来,\(deque\)可以在\(O( ...

  2. 关于Snoop的用法

    snoop是开发wpf应用程序的利器.用它可以观察WPF的可视树,监听事件,更改元素属性等. 下面我介绍下snoop一些用法. 1.获取指定应用程序的UI   打开snoop,选择"Drag ...

  3. VisualGDB系列2:VisualGDB对Linux平台的支持特性

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 1 复杂问题的直观解决方案 只需要轻点几 ...

  4. html锚链接

    锚点(anchor):其实就是超链接的一种,一种特殊的超链接 普通的超链接,<a href="路径"></a> 是跳转到不同的页面 而锚点,<a hr ...

  5. 使用TRY CATCH进行SQL Server异常处理

    TRY...CATCH是Sql Server 2005/2008令人印象深刻的新特性.提高了开发人员异常处理能力.没有理由不尝试一下Try.. Catch功能. *      TRY 块 - 包含可能 ...

  6. 洛谷-跑步-NOI导刊2010提高

    新牛到部队, CG 要求它们每天早上搞晨跑,从A农场跑到B农场.从A农场到B农场中有n-2个路口,分别标上号,A农场为1号, B农场为n号,路口分别为 2 ..n -1 号,从A农场到B农场有很多条路 ...

  7. 在PCL中如何实现点云压缩(1)

    点云由庞大的数据集组成,这些数据集通过距离.颜色.法线等附加信息来描述空间三维点.此外,点云能以非常高的速率被创建出来,因此需要占用相当大的存储资源,一旦点云需要存储或者通过速率受限制的通信信道进行传 ...

  8. \阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint2-采集端图像采集子系统设计

    1.在编写程序前有一个流程,思维导图: 初始化:包括初始化摄像头:注册事件到epoll 然后是开始启动采集:一旦开始采集我们的摄像头就会有数据了,它会触发事件处理函数:我们在这里的处理是保存这个图像: ...

  9. LeetCode第14题:最长公共前缀

    题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow ...

  10. Django 的认证系统

    Django自带的用户认证 auth 模块 from django.contrib import autu django.contrib.auth 中提供了许多方法, 这里主要介绍其中三个: auth ...