Erläutern sie kurz den Unterschied zwischen einem GString in Groovy und einem String und wie man einen mehrzeiligen GString definieren kann.
_Ein GString erlaubt es Variablen und Ausdrücke in einen String zu einzubetten, während ein String ein ganz herkömmlicher Java String ist, der keine Einbettugnen unterstützt. Mehrzeilige GStrings werden durch dreifache Anführungszeichen (""") definiert._
Wie kann man in Groovy sicherstellen, dass in folgendem Codebeispiel keine NullPointerException auftritt? Sehen sie davon ab try-catch-Blöcke zu verwenden. Hier ist ein bestimmter Operator gefordert.
Schreiben sie ein Groovy-Skript, dass eine gegebene Liste von Zahlen (1-10) filtert und hierbei nur die geraden Zahlen behält. Geben sie das Ergebnis auf der Konsole aus. Verwenden sie für ihre Implementierung ein Closure und die findAll() Methode für Listen.
_Tipp: Die findAll() Methode nimmt ein Closure an und gibt eine neue Liste zurück, die alle Elemente enthält, für die die Bedingung des Closures gelten._
#### Lösung:
```Groovy
def zahlen = (1..10).toList()
def istGerade = { zahl -> zahl % 2 == 0 }
def geradeZahlen = zahlen.findAll(istGerade)
println geradeZahlen
```
---
## Klassen und Closures:
Schreiben sie eine simple Klasse **Person**, die als Attribute den Namen und das Alter einer Person erhält. Erstellen sie im nächsten Schritt folgende drei Objekte dieser Klasse und packen sie diese in eine Liste:
1. Max, 12 Jahre
2. Karl, 40 Jahre
3. Laura, 23 Jahre
Wenden sie nun zwei Closures auf diese Liste an, um alle Personen, die volljährig sind in eine Liste zu schreiben. Die Namen sollen diesmal aber groß geschrieben sein. Ihre Ausgabe sollte also wie folgt aussehen:
```Groovy
[KARL, LAURA]
```
_Tipp: Sie werden sowohl die **findAll()**, als auch die **collect()** Methode auf Listen brauchen. Beide Methoden nehmen ein Closure als Argument an. \
Die **findAll()** Methode prüft alle Elemente einer Liste auf eine Bedingung und gibt eine neue Liste aus mit allen Elementen, auf die die Bedingung zutrifft.
Die **collect()** Methode wird verwendet, um eine Liste oder eine Sammlung zu transformieren und gibt eine neue Liste mit den transformierten Elementen aus._
#### Lösung:
```Groovy
class Person {
String name
int alter
public Person(String name, int alter){
this.name = name
this.alter = alter
}
}
def personen = [new Person("Max", 12), new Person("Karl", 40), new Person("Laura", 23)]