Groovy基礎(chǔ)語法 - boolean岳掐、list伪嫁、array、map

1.boolean

布爾值是一種特殊的數(shù)據(jù)類型西壮,用于表示真值truefalse遗增。將此數(shù)據(jù)類型用于跟蹤真/假條件的簡單標(biāo)志。

布爾值可以存儲(chǔ)在變量中款青,并分配到字段中做修,就像任何其他數(shù)據(jù)類型一樣:

def myBooleanVariable = true
boolean untypedBooleanVar = false
booleanField = true

truefalse是僅有的兩個(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

在上面的示例中边臼,我們使用字符串鍵哄尔,但您也可以使用其他類型的值作為鍵:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市硼瓣,隨后出現(xiàn)的幾起案子究飞,更是在濱河造成了極大的恐慌,老刑警劉巖堂鲤,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亿傅,死亡現(xiàn)場離奇詭異,居然都是意外死亡瘟栖,警方通過查閱死者的電腦和手機(jī)葵擎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來半哟,“玉大人酬滤,你說我怎么就攤上這事签餐。” “怎么了盯串?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵氯檐,是天一觀的道長。 經(jīng)常有香客問我体捏,道長冠摄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任几缭,我火速辦了婚禮河泳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘年栓。我一直安慰自己拆挥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布某抓。 她就那樣靜靜地躺著纸兔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪否副。 梳的紋絲不亂的頭發(fā)上食拜,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音副编,去河邊找鬼负甸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛痹届,可吹牛的內(nèi)容都是我干的呻待。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼队腐,長吁一口氣:“原來是場噩夢啊……” “哼蚕捉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柴淘,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤迫淹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后为严,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敛熬,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年第股,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了应民。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诲锹,靈堂內(nèi)的尸體忽然破棺而出繁仁,到底是詐尸還是另有隱情,我是刑警寧澤归园,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布黄虱,位于F島的核電站,受9級(jí)特大地震影響庸诱,放射性物質(zhì)發(fā)生泄漏悬钳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一偶翅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碉渡,春花似錦聚谁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至习霹,卻和暖如春朵耕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淋叶。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工阎曹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人煞檩。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓处嫌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親斟湃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熏迹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容