There are a number of collections in Groovy, ranges which is not in Java allows you to create a list of sequential values, lists and maps which are similar to the Java versions.
Ranges allow you to create a list of sequential values using two dot notations
| Range examples | Range r = 1..10
println "Range: " + r
println "Range: ${r}"
println r.class.name
println r.from // starting position in this case 1
println r.to // ending position in this case 10
Range r2 = 1..<10 // Won't include the 10
println "Range: ${r2}" // Notice the 10 is missing
Range r3 = 10..1 // You can also reverse the numbers
println "Range: ${r3}"
println "--------------"
assert (0..10).contains(0)
assert (0..10).contains(5)
assert (0..10).contains(10)
assert (0..10).contains(-1) == false
assert (0..10).contains(11) == false
assert (0..<10).contains(0)
assert (0..<10).contains(10) == false
Date today = new Date()
Date oneWeekAway = today + 7 // thank the GDK for that simple statement
println today
println oneWeekAway
Range days = today..oneWeekAway
println days
Range letters = 'a'..'z'
println letters |
| Practical example of ranges | enum Days {
SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY
}
def dayRange = Days.SUNDAY..Days.SATURDAY
dayRange.each { day ->
println day
}
println dayRange.size()
println dayRange.contains(Days.WEDNESDAY)
// Bonus: next() and previous() are equivalent to ++ and -- operators.
def wednesday = Days.WEDNESDAY
assert Days.THURSDAY == ++wednesday
assert Days.WEDNESDAY == --wednesday |
The List is a structure used to store a collection of data items. In Groovy, the List holds a sequence of object references. Object references in a List occupy a position in the sequence and are distinguished by an integer index, starting at 0. A List literal is presented as a series of objects separated by commas and enclosed in square brackets.
Lists have many methods that you can use like push(), pull(), pop(), remove() and many many more.
| List examples | List nums = [1,2,3,6,7,9,4,5,3,6,8,9]
println nums
println nums.class.name
List nums2 = [1,2,3,6,7,9,4,5,3,6,8,9] as LinkedList
println nums2.class.name
// add to List
nums.push(99)
nums.putAt(0,77) // should use below, it's the same
nums[0] = 78
nums + 7 // this does not change original List (creates new list which you need to assign)
nums << 66
println nums
// remove from List
nums.pop()
nums.removeAt(0)
def newList = nums - 3 // minus like plus does not change original List
println newList
// get from List
println "getAt: " + nums.getAt(0..3) // retrieve elements 0-3 from the list
// clear the list
nums = []
// flatten
nums << [3,4,5]
nums << [1,2]
println nums // list contains list of lists
println nums.flatten() // flatten all lists into one big list
// equals
def myNumbers = [1,2,3]
def myNumbers2 = [1,2,3]
println myNumbers.equals(myNumbers2)
// findAll
println nums.findAll { it == 4 }
println nums.flatten().findAll { it < 4 }
// getAt(Range)
println "Current List: ${nums}"
println nums.getAt(1)
// reverse list
println nums.reverse()
// unique
println nums.unique()
// Java Collections List(LinkedList) (Set,SortedSet)
def evens = [10,2,8,4,24,14,2] as Set
println evens
println evens.class.name |
A Map is an unordered collection of object references. The elements in a Map collection are accessed by a key which points to its value (key/value pair). The keys used in a Map can be of any class. When we insert into a Map collection, two values are required: the key and the value.
Maps have many methods that you can use like size(), sort(), clear() get() and many many more.
| Map examples | def map = [:] // Using a colon means a Map
println map // LinkedHashMap
println map.getClass().getName() // can use class.name
def person = [first:"Paul", last:"Valle", email:"paul.valle@example.com"] // Notice key/value pairs
println person
println person.first // accessing first key
println person["email"] // accessing using the key
person.twitter = "@paulvalle" // adding new field called twitter
println person
def emailKey = "EmailAddress"
def twitter = [username:"@paulvalle",(emailKey):"paul.valle@example.com"] // you can use a variable for the key name
println person.size() // there are many methods that you can use
println person.sort()
// looping through person
println "-----------------------------------------------------"
for( entry in person ) {
println entry
}
println "-----------------------------------------------------"
for( key in person.keySet() ) {
println "$key:${person[key]}"
} |