// collections.groovy — lists, maps and ranges with Groovy syntax. // Lists: [] creates an ArrayList def skus = ['AX-200', 'BX-310'] skus << 'CX-420' // append skus += 'DX-530' println skus // [AX-200, BX-310, CX-420, DX-530] println skus[0] + ' ' + skus[-1] // first and last println skus[1..2] // [BX-310, CX-420] println skus.size() println 'BX-310' in skus // true println([3, 1, 2].sort()) // [1, 2, 3] println([1, 2, 2, 3].unique()) // [1, 2, 3] println([1, 2, 3] - [2]) // [1, 3] // Maps: [key: value] creates a LinkedHashMap (keeps insertion order) def stock = ['AX-200': 12, 'BX-310': 0] stock['CX-420'] = 7 // add stock.'DX-530' = 3 // property-style access println stock // [AX-200:12, BX-310:0, CX-420:7, DX-530:3] println stock['AX-200'] // 12 println stock.get('ZZ-999', 0) // 0 (and stores it) def order = [id: 'PO-4471', customer: 'Acme', lines: 3] // simple keys need no quotes println order.customer // Acme order.each { key, value -> println "$key -> $value" } // Ranges def range = 1..5 println range.toList() // [1, 2, 3, 4, 5] println((1..<5).toList()) // [1, 2, 3, 4] (exclusive end) println(('a'..'e').join('')) // abcde for (i in 1..3) print "$i " println() // Nested data, like JSON def payload = [orders: [[id: 'PO-1', total: 250], [id: 'PO-2', total: 90]]] println payload.orders*.id // [PO-1, PO-2] (spread operator) println payload.orders.total.sum() // 340