Groovy基礎語法-list

Ykubernetes發表於2024-06-02

定義list

groovy:000> ls1 = [1,2,3,4,5,6,7]
===> [1, 2, 3, 4, 5, 6, 7]

list基本操作

1、將元素新增到list尾部

groovy:000> ls1.add(8)
===> true

2、移除List中的元素
根據下標刪除元素

groovy:000> ls1.remove(1)
===> 2  # 將list中2給移除了,下標為1

3、修改list中的元素

# 方式1
groovy:000> ls1.set(0,10) #將索引為0的元素修改為10
===> 1
groovy:000> ls1
===> [10, 3, 4, 5, 6, 7, 8]

# 方式二
# 將List中索引為0的元素更改為10
groovy:000> ls1.putAt(0,10) 

4、獲取list中的元素

groovy:000> ls1.get(5) # 獲取索引為5的元素
===> 7
# 獲取List中索引為i的元素,可以使用負數索引
groovy:000> l1[0]
===> a
# 獲取List中索引為i的元素,可以使用負數索引
groovy:000> l1.getAt(0)
===> a
groovy:000> l1.getAt(-1)
===> 8
# 獲取List中索引為i的元素,不能使用負數索引
groovy:000> l1.get(1)
===> b

5、獲取子列表

groovy:000> ls1 = [1,2,3,4,5,6,7]
===> [1, 2, 3, 4, 5, 6, 7] # 重新定義一個ls1
groovy:000> ls1.subList(2,5) # 獲取第 3 到 5 間的元素
===> [3, 4, 5]

6、是否包含元素3

groovy:000> ls1.contains(3)
===> true

7、獲取首個元素和最後一個元素

groovy:000> ls1.first()
===> 1
groovy:000> ls1.last()
===> 7

8、獲取陣列長度

groovy:000> ls1.size()
===> 8

9、判斷list是否為空

groovy:000> ls1.empty
===> false

彈出和壓入元素(push pop)

1、pop 從此列表中刪除最後一個專案

groovy:000> ls1 = [1,2,3,4,5,6,7]
===> [1, 2, 3, 4, 5, 6, 7]
groovy:000> ls1.pop()
===> 7
groovy:000> ls1.pop()
===> 6
groovy:000> ls1
===> [1, 2, 3, 4, 5]

2、push 建立由原始元素和集合中指定的元素組成的新列表

groovy:000> ls1 = [1,2,3,4,5,6,7]
===> [1, 2, 3, 4, 5, 6, 7]
groovy:000> ls1.push(8)
===> true
groovy:000> ls1
===> [1, 2, 3, 4, 5, 6, 7, 8]

獲取陣列型別

groovy:000> ls1.getClass()
===> class java.util.ArrayList

陣列複製

1、l1賦給l2 無論修改l1或者l2 兩者都會變化,底層同一份資料

groovy:000> l1 = ["a","b","c","d","e","f",1,2,3,4,5,6]
===> [a, b, c, d, e, f, 1, 2, 3, 4, 5, 6]
groovy:000> l2 = l1
===> [a, b, c, d, e, f, 1, 2, 3, 4, 5, 6]

陣列迭代

// 定義一個水果類的陣列
fruits = ["apple","Cherry tomato","Cherry","Custard","Dates","Grape"]

// 迭代,取值,不要索引
fruits.each{val -> println val}

// 迭代,取值,帶索引
fruits.eachWithIndex{val,index -> println index + "::" + val}

# 示例如下
//  定義一個水果類的陣列
groovy:000> fruits = ["apple","Cherry tomato","Cherry","Custard","Dates","Grape"]

// 迭代,取值,不要索引
groovy:000> fruits.each{val -> println val}
apple
Cherry tomato
Cherry
Custard
Dates
Grape

// 迭代,取值,帶索引
groovy:000> fruits.eachWithIndex{val,index -> println index + "::" + val}
0::apple
1::Cherry tomato
2::Cherry
3::Custard
4::Dates
5::Grape

List的查詢和過濾

// 定義一個List
groovy:000> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
===> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

// 查詢大於5的元素
groovy:000> numbers.findAll { it > 5 }
===> [6, 7, 8, 9, 10]

//  查詢小於5的元素
groovy:000> numbers.findAll { it < 5 }
===> [1, 2, 3, 4]

// 查詢等於5的元素
groovy:000> numbers.findAll { it == 5 }
===> [5]

// 查詢第一個大於5的元素,這是是find 不是findAll
numbers.find { it > 5 }
===> 6

// 查詢是否存在大於10的元素
numbers.any { it > 10 }
===> false

// 查詢所有的偶數
groovy:000> numbers.findAll { it % 2 == 0 }
===> [2, 4, 6, 8, 10]

索引

groovy:000> l3 = ['a','b','c','d','c']
===> [a, b, c, d, c]

// 返回index
groovy:000> l3.indexOf("c")
===> 2

// index返回-1意味著沒有找到結果
groovy:000> l3.indexOf("z")
===> -1

// 返回最後一個索引
groovy:000> l3.lastIndexOf("c")
===> 4

判斷

List.every{條件}:如果List中每一個元素都符合條件就返回true,否則為false

List.any{條件}:如果List中有一個元素符合條件就返回true,否則為false

groovy:000> l1 = [1,2,3,4,5,6]
===> [1, 2, 3, 4, 5, 6]

// 如果每一個元素都符合條件則返回true
groovy:000> l1.every{it < 7}
===> true

// 如果每一個元素都符合條件則返回true
groovy:000> l1.every{it < 6}
===> false

// any 如果有一個元素符合條件就返回true
groovy:000> l1.any{it > 5}
===> true

// any 如果有一個元素符合條件就返回true
groovy:000> l1.any{it > 3}
===> true