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.
Search WWH ::




Custom Search