Database Reference
In-Depth Information
Nächstes ermitteln wir in unserer
collect
-Closure, ob der fragliche Wein
eingehende
reported
_
on
-Kanten besitzt. Der
toList
-Aufruf macht aus der
Pipeline eine echte Liste. Wir können dann prüfen, ob sie leer ist. Die von
diesem Code erzeugte
rated
_
list
besteht aus Wahr/Falsch-Werten.
Um zu zählen, wie viele Weine nicht bewertet wurden, lassen wir diese Liste
über die
inject
-Methode durch einen Reducer laufen.
rated
_
list.inject(0){ count, is
_
rated ->
if (is
_
rated) {
count
} else {
count + 1
}
}
Bei Groovy trennt der Pfeiloperator (
->
) die Eingabeargumente für eine Clo-
sure von deren Rumpf. Unser Reducer muss den akkumulierten Zähler nach-
halten und entscheiden, ob der aktuelle Wein schon bewertet wurde oder
nicht. Das ist der Grund für
count
und
is
_
rated
.Der
0
-Teil von
inject(0)
initialisiert
count
vor dem ersten Aufruf mit 0. Innerhalb des Bodies der Clo-
sure-Funktion liefern wir dann entweder den aktuellen Zähler zurück (wenn
der Wein bereits bewertet wurde) oder erhöhen ihn um 1 (wenn er noch nicht
bewertet wurde). Das Endergebnis ist die Zahl der Falsch-Werte der Liste
(also die Zahl der nicht bewerteten Weine).
==> 2
Es stellt sich heraus, dass zwei Weine noch nicht bewertet wurden.
Dank dieser vielen zur Verfügung stehenden Tools können Sie mächtige Kom-
binationen aus Graph-Traversierungen und -Transformationen durchfüh-
ren. Nehmen wir an, Sie möchten alle Freundes-Paare in Ihrem Graphen
finden. Dazu müssen wir zuerst alle Kanten vom Typ
friends
finden und
dann über eine
transform
-Operation die Namen der beiden Personen ausge-
ben, die sich diese Kante teilen.
g.V.outE('friends').transform{[it.outV.name.next(), it.inV.name.next()]}
==> [Patty, Tom]
==> [Patty, Alice]
Im obigen Code ist der Rückgabewert der
transform
-Closure ein Array-Literal
(
[...]
) mit zwei Elementen: den Ein- und Ausgangsknoten der
friend
-Kante.