2014-07-14 5 views
6

So habe ich ziemlich ausführlich mit der Neo4j API gearbeitet, und ich habe festgestellt, dass so gut wie immer werden sie Funktionen haben, dieWann ich Iterable <String> anstatt List, Set, Collection zurückgeben soll?

Iterable<Class> 

zurückkehren, während ich immer verstanden haben, dass es besser ist, eine von Set zurückzukehren, List oder Sammlung, es sei denn, es besteht ein zwingender Grund, etwas anderes zu tun. Legen Sie fest, dass dem Benutzer angezeigt wird, dass es niemals doppelte Elemente geben wird. Listen Sie auf, wenn die Reihenfolge wichtig ist oder dass sie Duplikate enthält, oder Sammeln, wenn Sie keine Richtlinie haben.

Ich bevorzuge diese zu Iterable, da sie nützliche Dienstprogramme wie .contains(), .add() etc. haben. Ich habe festgestellt, dass ich sehr oft Code schreiben muss, um ein Iterable in eine Sammlung umzuwandeln.

Also meine Frage ist: Vermisse ich etwas Wichtiges? Gibt es einen vernünftigen Grund, Iterable Over Collection zu verwenden? Wann würdest du das tun? Offensichtlich scheinen die Jungs von Neo4j erstklassige Programmierer zu sein, also nehme ich an, dass sie einen Grund dafür haben, aber ich kann es nicht sehen.

Antwort

8

Das heißt einfach, dass sie Ihnen etwas geben, über das Sie iterieren können. Sie machen keine Versprechen darüber, was unter dem Deckmantel umgesetzt wird.

Insbesondere gibt es möglicherweise keine echte Erfassungsklasse dahinter. Die Elemente können bei der Iteration über sie ausgewertet und/oder abgerufen werden (stellen Sie sich vor, wie Sie möglicherweise eine Sammlung von beispielsweise 100 Millionen Elementen zurückgeben könnten). In diesem Fall solltest du vorsichtig sein, alle Elemente in einer verdichteten Sammlung zu sammeln, da sie ziemlich umfangreich sein wird.

Da Neo4J eine Graphdatenbank ist, macht das Sinn. Es ist analog zu einer JDBC ResultSet, in der Sie keine Sammlung von Ergebnissen erhalten, sondern Zeile für Zeile, und wenn Sie wirklich alle Ergebnisse speichern möchten, müssen Sie explizit eine Sammlung erstellen.

+1

Ja, es ist meist über faule Auswertung der Ergebnisse. Die Sammlung Klassen sind alle eifrig. Eigentlich ist Iterable nur syntaktischer Zucker für einen 'Inter- ater', um den einzelnen Iterator innerhalb einer Foreach verwenden zu können –

Verwandte Themen