1.boolean
布爾值是一種特殊的數(shù)據(jù)類型西壮,用于表示真值true
和 false
遗增。將此數(shù)據(jù)類型用于跟蹤真/假條件的簡單標(biāo)志。
布爾值可以存儲(chǔ)在變量中款青,并分配到字段中做修,就像任何其他數(shù)據(jù)類型一樣:
def myBooleanVariable = true
boolean untypedBooleanVar = false
booleanField = true
true
和false
是僅有的兩個(gè)原始布爾值。但是抡草,可以使用邏輯運(yùn)算符表示更復(fù)雜的布爾表達(dá)式饰及。
2.list
Groovy 使用逗號(hào)分隔的值列表(用方括號(hào)括起來)來表示列表。Groovy列表是普通的JDK java.util.List
康震,因?yàn)镚roovy沒有定義自己的集合類燎含。定義列表文本時(shí)使用的具體列表實(shí)現(xiàn)是默認(rèn)的java.util.ArrayList
,除非您決定另行指定腿短,我們將在后面看到屏箍。
def numbers = [1, 2, 3]
assert numbers instanceof List //true
assert numbers.size() == 3 //true
- 我們定義一個(gè)由逗號(hào)分隔并用方括號(hào)括起來的列表編號(hào),并將該列表分配到變量中
- 該列表是 Java
java.util.List
接口的一個(gè)實(shí)例 - 可以使用
size()
該方法查詢列表的大小橘忱,并顯示我們的列表包含3個(gè)元素
在上面的示例中赴魁,我們使用了同構(gòu)列表,但您也可以創(chuàng)建包含異構(gòu)類型值的列表:
def heterogeneous = [1, "a", true]
- 我們的列表包含一個(gè)數(shù)字钝诚,一個(gè)字符串和一個(gè)布爾值
我們提到颖御,默認(rèn)情況下,列表文本實(shí)際上是java.util.ArrayList
的實(shí)例凝颇,但是由于對(duì)as
運(yùn)算符使用類型強(qiáng)制或?qū)ψ兞渴褂蔑@式類型聲明潘拱,因此可以對(duì)我們的列表使用不同的支持類型:
def arrayList = [1, 2, 3]
assert arrayList instanceof java.util.ArrayList //true
def linkedList = [2, 3, 4] as LinkedList
assert linkedList instanceof java.util.LinkedList //true
LinkedList otherLinked = [3, 4, 5]
assert otherLinked instanceof java.util.LinkedList //true
您可以使用具有正索引或負(fù)索引的[]
下標(biāo)運(yùn)算符(用于讀取和設(shè)置值)訪問列表中的元素秉继,以從列表末尾以及范圍訪問元素,并使用 leftShift <<
運(yùn)算符將元素追加到列表中:
def letters = ['a', 'b', 'c', 'd']
assert letters[0] == 'a' //true
assert letters[1] == 'b' //true
assert letters[-1] == 'd' //true
assert letters[-2] == 'c' //true
letters[2] = 'C'
assert letters[2] == 'C' //true
letters << 'e'
assert letters[ 4] == 'e' //true
assert letters[-1] == 'e' //true
assert letters[1, 3] == ['b', 'd'] //true
assert letters[2..4] == ['C', 'd', 'e'] //true
- 訪問列表的第一個(gè)元素(從零開始計(jì)數(shù))
- 使用負(fù)索引訪問列表中的最后一個(gè)元素:-1 是列表末尾的第一個(gè)元素
- 使用賦值為列表的第三個(gè)元素設(shè)置新值
- 使用左移運(yùn)算符
<<
在列表末尾追加一個(gè)元素 - 一次訪問兩個(gè)元素泽铛,返回包含這兩個(gè)元素的新列表
- 使用范圍可訪問列表中的值范圍,從開始到結(jié)束元素位置
由于列表本質(zhì)上是異構(gòu)的辑鲤,因此列表還可以包含其他列表以創(chuàng)建多維列表:
def multi = [[0, 1], [2, 3]]
assert multi[1][0] == 2 //true
- 定義數(shù)字列表的列表
- 訪問最頂層列表的第二個(gè)元素和內(nèi)部列表的第一個(gè)元素
3.數(shù)組
Groovy 對(duì)數(shù)組重用列表表示法盔腔,但要使此類文本數(shù)組,您需要通過強(qiáng)制或類型聲明顯式定義數(shù)組的類型月褥。
String[] arrStr = ['Ananas', 'Banana', 'Kiwi']
assert arrStr instanceof String[] //true
assert !(arrStr instanceof List) //true
def numArr = [1, 2, 3] as int[]
assert numArr instanceof int[] //true
assert numArr.size() == 3 //true
- 使用顯式變量類型聲明定義字符串?dāng)?shù)組
- 斷言我們創(chuàng)建了一個(gè)字符串?dāng)?shù)組
- 使用
as
運(yùn)算符創(chuàng)建整數(shù)數(shù)組 - 斷言我們創(chuàng)建了一個(gè)基元整數(shù)數(shù)組
您還可以創(chuàng)建多維數(shù)組:
def matrix3 = new Integer[3][3]
assert matrix3.size() == 3 //true
Integer[][] matrix2
matrix2 = [[1, 2], [3, 4]]
assert matrix2 instanceof Integer[][] //true
- 您可以定義新數(shù)組的邊界
- 或者聲明數(shù)組而不指定其邊界
對(duì)數(shù)組元素的訪問遵循與列表相同的表示法:
String[] names = ['Cédric', 'Guillaume', 'Jochen', 'Paul']
assert names[0] == 'Cédric' //true
names[2] = 'Blackdrag'
assert names[2] == 'Blackdrag' //true
- 檢索數(shù)組的第一個(gè)元素
- 將數(shù)組第三個(gè)元素的值設(shè)置為新值
Groovy一直支持使用方括號(hào)的文字列表/數(shù)組定義弛随,并避免使用Java風(fēng)格的大括號(hào),以免與閉包定義沖突宁赤。但是舀透,如果大括號(hào)緊跟在數(shù)組類型聲明之后,則閉包定義沒有歧義决左,因此 Groovy 3 及更高版本支持 Java 數(shù)組初始化表達(dá)式的該變體愕够。
例子:
def primes = new int[] {2, 3, 5, 7, 11}
assert primes.size() == 5 && primes.sum() == 28 //true
assert primes.class.name == '[I' //true
def pets = new String[] {'cat', 'dog'}
assert pets.size() == 2 && pets.sum() == 'catdog' //true
assert pets.class.name == '[Ljava.lang.String;' //true
// traditional Groovy alternative still supported
String[] groovyBooks = [ 'Groovy in Action', 'Making Java Groovy' ]
assert groovyBooks.every{ it.contains('Groovy') } //true
4.map
Groovy有時(shí)在其他語言中稱為字典或關(guān)聯(lián)數(shù)組,具有map功能佛猛。映射將鍵與值相關(guān)聯(lián)惑芭,用冒號(hào)分隔鍵和值,每個(gè)鍵/值都用逗號(hào)配對(duì)继找,整個(gè)鍵和值用方括號(hào)括起來遂跟。
def colors = [red: '#FF0000', green: '#00FF00', blue: '#0000FF']
assert colors['red'] == '#FF0000' //true
assert colors.green == '#00FF00' //true
colors['pink'] = '#FF00FF'
colors.yellow = '#FFFF00'
assert colors.pink == '#FF00FF' //true
assert colors['yellow'] == '#FFFF00' //true
assert colors instanceof java.util.LinkedHashMap //true
- 我們定義了字符串顏色名稱的映射,與它們的十六進(jìn)制編碼的html顏色相關(guān)聯(lián)
- 我們使用下標(biāo)符號(hào)來檢查與密鑰關(guān)聯(lián)的內(nèi)容
- 我們還可以使用屬性表示法來斷言綠色的十六進(jìn)制表示
- 類似地婴渡,我們可以使用下標(biāo)表示法來添加新的鍵/值對(duì)
- 或?qū)傩员硎痉ɑ盟蕴砑宇伾?/li>
Groovy 創(chuàng)建的映射實(shí)際上是
java.util.LinkedHashMap
的實(shí)例。
如果您嘗試訪問地圖中不存在的密鑰:
assert colors.unknown == null //true
def emptyMap = [:]
assert emptyMap.anyKey == null //true
在上面的示例中边臼,我們使用字符串鍵哄尔,但您也可以使用其他類型的值作為鍵: