03Groovy语法(二)——集合

时间:2022-12-31 13:06:01

Groovy中的集合

集合的使用是非常的广泛的。

Groovy中集合的特点

  • Groovy直接在语言内部使用集合,

    1. 它不用导入专门的类
    2. 不用初始化对象
    3. 集合是语言本身的本地成员
  • 每个Groovy集合都是Java.util.Collenction或Java.util.Map的实例

  • List,String,StringBuffer,Range,Map,File,Matcher都使用统一的size()方法来获取长度的。
    StringBuffer x = new StringBuffer(“ssss”)
    print x.size()//输出4

Groovy中的List

定义一个列表

def toys = [[‘a’,’001’],[2,’002’],[‘c’,’003’]]
print toys.class //输出的是:java.util.ArrayList

操作数组

通过下标操作数组对象,索引从0开始

获取

print toys[0]//输出:索引从0开始,输出[‘a’,’001’]
println toys.get(0)//通过get方法获取:输出[‘a’,’001’]
println toys[-2]//从后向前数,第二个 输出:[2,’002’]
println toys[1..<2]//范围,从开始小于2的 输出:[2,’002’]

修改

toys[2] = [3,’003’]
toys.putAt(2,[33,’333’])
println toys[-1]

添加元素

toys << [4,’004’]//追加一个列表(追加的是一个列表)
toys << ‘8’//追加了一个元素

两个列表的连接

toys1 = [1,2,3]
toys2 = toys1 + [4,5]
println toys2 //输出:[1,2,3,4,5]

从列表中删除元素

toys3 = toys2 -[5]
pirntln toys3//输出:[1,2,3,4]

List 中的一些方法

def list = [1,2,3]
list.add(4) //[1,2,3,4]
list.add(3,9)//[1,2,3,9,4]
list.addAll([10,11])//[1,2,3,9,4,10,11]
println list.contains(11)//true
println list.containaALL([2,3]) //true
println list.indexOf(11) //6

删除元素

list.remove(11)//[1,2,3,9,4,10]
list.removeAll([2,3])//[1,9,4,10]
list.clear()//[]
list.pop()删除列表最后的元素

排序

list.sort()

统计重复元素个数

list.count(2)//统计列表中的2的个数

注意:这些方法中,有些会修改原列表内容,而有些又不会修改原来的列表,而只是返回一个修改的新的列表。我们编程时需要注意哦。
下面是一些返回新列表的方法:
def list = [1,2,[3,4,5]]
list.flatten()//展开后返回新的列表 [1,2,3,4,5]
list.intersect([2,4,5])//求交集 [2]
list.reverse()//反转列表,返回新的列表

Groovy中的Map(映射)

定义映射

def map = [:]//一个空map
println map.getClass()//输出java.util.LinkedHashMap
map.size()方法返回元素个数

KV

def map = [1:’toy1’,2:’toy2’]
map.containsValue(“toy1”)//是否包含value true
map.containsKey(1)//是否包含key true

Map的基本操作

println map //输出整个的map内容[1:’toy1’,2:’toy2’]
map[2]//获得key==2的值。
map.get(1)//key==1的值

遍历Map(映射)元素,并且通过闭包执行对应的操作

map.each{toy -> println toy.key + “:” +toy.value}
注意:each函数,就替代了java中的迭代器。

添加元素

map.put(3,”toy3”)//如果key 3 已经存就会覆盖值。

删除

map.remove(2)

获取Map的key

map.keySet()//,输出[1,2]
map.values()//获取Map中的value,输出[“toy1”,”toy2”]
map.asList()//转换为ArrayList对象

范围

范围是Groovy的特性

范围定义

def range = 1..<5//从1开始小于5的数值[1,2,3,4]
范围类型:groovy.lang.IntRange 是特殊的List

def range = ‘a’..<’e’//也是一个范围,[a,b,c,d]
类型:groovy.lang.ObjectRange 是特殊的List

倒序范围

range = 5..1//[5,4,3,2,1]
range = ‘e’..<’b’ //[‘e’,’d’,’c’]

范围的方法

def range = 1..10
range.size()//输出10
range.contains(5) //输出5
range.get(8)// 下标为8 的值 输出9
range.getFrom()//范围开始值 输出:1
range.getTo()//范围结束值 输出:10
range.isReverse()//是不是倒序 输出FALSE
range.subList(3,6)子范围 输出:[4,5,6]