Kurz: def s = [3, 1, 2, 3, 1] as Set println s println s.size() println (s + [9]) println s.intersect([1, 9]) println(([1, 2] as Set) == ([2, 1] as Set)) def sortiert = new TreeSet([5, 2, 8]) println sortiert println sortiert.first()
Teil des Kurses Groovy
Listen
def l = [5, 3, 9, 1, 7]
println l
println "${l.size()} ${l[0]} ${l[-1]} ${l.first()} ${l.last()}"
println l[1..3]
println l.sort(false)
println l.reverse()
println l.collect { it * 2 }
println l.findAll { it > 4 }
println l.find { it > 4 }
println "${l.sum()} ${l.min()} ${l.max()} ${l.count { it > 3 }}"
println l.inject(0) { acc, x -> acc + x }
println "${l.any { it > 8 }} ${l.every { it > 0 }}"
println l.take(2)
println l.drop(3)
println l.join("-")
println (l + [8, 9])
println (l - [3, 9])
println l.indexOf(9)
println l.contains(7)
l << 11
l.add(0, 100)
l.remove(0)
println l
println l.groupBy { it % 2 == 0 ? "gerade" : "ungerade" }
println l.collate(2)
println([[1, 2], [3]].flatten())
println([1, 2, 2, 3, 3, 3].unique())
println ([1, 2, 3].withIndex().collect { v, i -> v * i })
println l.sort().toUnique()
def kopf = l.head()
println kopf
println([3, 1, 2].sort { a, b -> b <=> a })
println(["bb", "a", "ccc"].sort { it.length() })
println ([1, 2, 3, 4].split { it % 2 == 0 })Ausgabe:
[5, 3, 9, 1, 7]
5 5 7 5 7
[3, 9, 1]
[1, 3, 5, 7, 9]
[7, 1, 9, 3, 5]
[10, 6, 18, 2, 14]
[5, 9, 7]
5
25 1 9 3
25
true true
[5, 3]
[1, 7]
5-3-9-1-7
[5, 3, 9, 1, 7, 8, 9]
[5, 1, 7]
2
true
[5, 3, 9, 1, 7, 11]
[ungerade:[5, 3, 9, 1, 7, 11]]
[[5, 3], [9, 1], [7, 11]]
[1, 2, 3]
[1, 2, 3]
[0, 2, 6]
[1, 3, 5, 7, 9, 11]
1
[3, 2, 1]
[a, bb, ccc]
[[2, 4], [1, 3]]Maps
def alter = [Mia: 17, Tom: 25, Zoe: 31]
println alter
println alter.Mia
println alter["Tom"]
println alter.get("Ben", 0)
alter.Ben = 12
alter["Max"] = 40
println alter.size()
println alter.keySet().sort()
println alter.values().sort()
println alter.containsKey("Zoe")
alter.each { name, a -> print "$name=$a " }
println()
println alter.findAll { k, v -> v > 20 }.keySet().sort()
println alter.collect { k, v -> "$k:$v" }.sort()
println alter.sort { it.value }.keySet()
println alter.max { it.value }.key
println alter.values().sum()
def zaehler = [:].withDefault { 0 }
"mississippi".each { zaehler[it]++ }
println zaehler.sort { a, b -> b.value <=> a.value ?: a.key <=> b.key }
println "mississippi".toList().countBy { it }.sort { it.key }
alter.remove("Max")
println alter.size()
println alter.subMap(["Mia", "Tom"])
println ([a: 1] + [b: 2])Ausgabe:
[Mia:17, Tom:25, Zoe:31]
17
25
0
5
[Ben, Max, Mia, Tom, Zoe]
[12, 17, 25, 31, 40]
true
Mia=17 Tom=25 Zoe=31 Ben=12 Max=40
[Max, Tom, Zoe]
[Ben:12, Max:40, Mia:17, Tom:25, Zoe:31]
[Ben, Mia, Tom, Zoe, Max]
Max
125
[i:4, s:4, p:2, m:1]
[i:4, m:1, p:2, s:4]
4
[Mia:17, Tom:25]
[a:1, b:2]Ranges und Sets
def r = 1..10
println r
println r.contains(5)
println r.size()
println (r.step(3))
println r.collect { it * it }
println(('a'..'e').toList())
println r.sum()
println((1..<5).toList())
println((10..1).toList())
def s = [3, 1, 2, 3, 1] as Set
println s
println s.size()
println (s + [9])
println s.intersect([1, 9])
println(([1, 2] as Set) == ([2, 1] as Set))
def sortiert = new TreeSet([5, 2, 8])
println sortiert
println sortiert.first()
def spread = [[a: 1], [a: 2]]*.a
println spread
println(["x", "yy"]*.length())Ausgabe:
1..10
true
10
[1, 4, 7, 10]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[a, b, c, d, e]
55
[1, 2, 3, 4]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
[3, 1, 2]
3
[3, 1, 2, 9]
[1]
true
[2, 5, 8]
2
[1, 2]
[1, 2]Operator-Überladung und Spread
println ([1, 2, 3] * 2)
println ("ab" * 3)
println((1..3).collect { [it, it * it] }.collectEntries { [(it[0]): it[1]] })
def (a, b, c) = [1, 2]
println "$a $b $c"
def (x, y) = [10, 20]
(x, y) = [y, x]
println "$x $y"
def args = [1, 2, 3]
def summe3(p, q, r) { p + q + r }
println summe3(*args)
def m = [a: 1, b: 2]
println "${m.a} ${m.'b'}"
def teile = "a,b,c".split(",")
println teile.getClass().simpleName
println ("a b c".tokenize())
println "x".padLeft(4, '*') + "|" + "y".padRight(3) + "|"Ausgabe:
[1, 2, 3, 1, 2, 3]
ababab
[1:1, 2:4, 3:9]
1 2 null
20 10
6
1 2
String[]
[a, b, c]
***x|y |Merke
- Listen
[...], Maps[key: value], Ranges1..5und Sets bieten viele Komfortmethoden collect,findAll,inject,groupBy,countBy,sum,sort { }ersetzen Schleifen*.(Spread) ruft eine Methode für jedes Element auf;*listeverteilt ArgumentewithDefaultmacht Zählermaps einfach
Übungsaufgabe
Zähle mit countBy die Wortlängen in einem Satz.
Quiz zur Selbstkontrolle
Was macht collect?
- Wandelt jedes Element um und liefert die neue Liste (richtig)
- Sammelt Müll
- Löscht Elemente
- Sortiert
Was ist ein Range?
- Eine Folge wie 1..10 (richtig)
- Ein Datentyp für Fließkommazahlen
- Ein Array fester Größe
- Eine Datei
Wofür steht *. ?
- Spread: Methode auf jedem Element aufrufen (richtig)
- Multiplikation
- Potenz
- Zeiger
Weiter im Kurs
Zurück: Kontrollfluss, Methoden und Closures
Weiter: Klassen, Traits und AST-Transformationen
Alle Kapitel: Groovy im Überblick