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})

}

}

最新文章

  1. U8采购订单联查采购入库单
  2. mybatis配置文件的bug
  3. [css]需警惕CSS3属性的书写顺序
  4. Hive conf issue
  5. 我的opencv之旅:ios人脸识别
  6. EMVTag系列8《IC卡公钥证书》
  7. TCL随记(2)
  8. Linux Shell 学习笔记
  9. 推荐一些C#相关的网站、资源和书籍(转载)
  10. Java自然语言处理NLP工具包
  11. 基于Spring的Appium配置应用
  12. Objective-C 中如何测量代码的效率
  13. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十六)
  14. 你真的了解String的常见API吗?
  15. 多线程:Operation(一)
  16. docker+jenkins实现spring boot项目持续集成自动化部署
  17. linux上安装telnet服务
  18. chrome plugins
  19. svn 报错及解决
  20. Asp.net mvc Kendo UI Grid的使用(三)

热门文章

  1. seaweedfs安装配置使用
  2. inner join ,left join ,right join区别
  3. navicat自动备份
  4. JAVAWeb SSH框架 利用POI 导出EXCEL,弹出保存框
  5. Entity Framework Code-First(9.3):DataAnnotations - ConcurrencyCheck Attribute
  6. 交叉编译Spice-gtk
  7. bootstrap初学者模板
  8. python之02数据类型学习-作业练习
  9. CAS客户端整合(三) Otrs
  10. 从零开始安装 Ambari (2) -- 准备本地 repository