2017-05-17 4 views
1
GraphTraversal<Vertex, Map<String, Object>> tsList = traversalSource.V().has("request","id_key",114).valueMap();   
while(tsList.hasNext()) 
{ 
System.out.println(tsList.next().get("status")); //prints result 
System.out.println(tsList.next().get("tree_id_key")); //prints result 
System.out.println(tsList.next().get("username")); //here throws Exception for any vertex. 
System.out.println(tsList.next().get("tree_status")); 
} 

verwenden, wenn ich die obigen Abfrage ausführen, erhalte ich Werte für jeden ersten und zweiten propertyKey. aber nachdem ich Antworten für zwei Schlüssel erhalten habe, wird NoFastSuchElementException für irgendeinen propertyKey geworfen ... Bitte hilf mir..wie kann ich das lösen?NoFastSuchElementException Erste, wenn ich valueMap() in Gremlin Abfrage mit Java

aber ich bin in der Lage, die Antwort mit folgenden Abfrage zu erhalten:

GraphTraversal<Vertex, Map<String, Object>> tsList = traversalSource.V().has("request","id_key",114).values("status","tree_id_key","username","tree_status");  
while(tsList.hasNext()) 
{ 
System.out.println(tsList.next());//prints "status" value 
System.out.println(tsList.next());//prints "tree_id_key" value 
System.out.println(tsList.next());//prints "username" value 
System.out.println(tsList.next());//prints "tree_status" value 
} 

aktualisiert:

GraphTraversal<Vertex, Map<String, Object>> ts = traversalSource.V().has("request","id_key",113).valueMap();   
while(ts.hasNext()) 
{ 
Map<String, Object> tsList=ts.next(); 
SuiteIdKey=(long)((ArrayList)tsList.get("suiteKey")).get(0); 
seqe=(int)((ArrayList)tsList.get("sequence")).get(0); 
} 

In der obigen Abfrage, ts viele Zeilen angezeigt werden kann und für jede Zeile werde ich suiteIdkey bekommen , Seqe..Ich bin in der Lage, die Antwort zu bekommen. Aber tsList ist Map <>, es gibt nicht direkt Antwort zurück, wenn ich wie diese verwende = (lang) tsList.get ("suiteKey"), ohne ArrayList. Ist es der richtige Weg? Bitte hilf mir.

Antwort

2

Sie verlangen zwei verschiedene Dinge in diesen zwei Durchquerungen. Die erste mit valueMap() fragt, dass der Scheitelpunkt in eine Map konvertiert werden soll, damit Sie next() in dieser Schleife nicht weiter aufrufen möchten. Just do:

Map<String, List<Object>> m = traversalSource.V().has("request", "id_key", 114). 
                valueMap().next();   
System.out.println(m.get("status").get(0)); 
System.out.println(m.get("tree_id_key").get(0)); 
System.out.println(m.get("username").get(0)); 
System.out.println(m.get("tree_status").get(0)); 

Beachten Sie darüber, dass ich gehe davon aus Ihrer Traversal immer eine Ecke zurück ... Konto für diese sonst, wenn das nicht wahr ist.

In Ihrer zweiten Traversal, wo Sie values() tun Sie Gremlin zu konvertieren, greifen die Werte dieser spezifischen Eigenschaften auf dieser Ecke und streamen sie aus und so müssen Sie mit mehreren Aufrufen zu nächsten iterieren.

Beachten Sie, dass das Zurückgeben des gesamten Vertex-Objekts normalerweise nicht empfohlen wird. Es ist etwas ähnlich wie SELECT * FROM table in SQL. Es ist besser, nur die Felder erhalten, die Sie erhalten möchten, welche Multi-Property-Ausgabe von Map<String, List<Object>> wird dann von der hässlichen los:

Map<String, Object> m = traversalSource.V().has("request", "id_key", 114). 
              project('s`,'tik', 'u', 'ts'). 
               by('status'). 
               by('tree_id_key'). 
               by('username') 
               by('tree_status'). 
              next();   
System.out.println(m.get("s")); 
System.out.println(m.get("tik")); 
System.out.println(m.get("u")); 
System.out.println(m.get("ts")); 
+0

Hallo Stephan, vielen Dank für Ihre answer..it arbeitet now..but Ich habe ein paar Zweifel..Ich habe die Frage in Bezug auf das aktualisiert..kannst du mir dabei helfen? – User12345

+1

Ja - Sie bekommen eine 'Liste' wegen [Multi-Eigenschaften] (http://tinkerpop.apache.org/docs/current/reference/#vertex-properties) - Ich habe meine Antwort ein wenig aktualisiert. –

+0

@ stephen..Ich habe meine id_key, username Eigenschaften mit cardinality.SINGLE erstellt, und jetzt, als ich versuchte, mit valueMap ("meine id_key", "Benutzername") abrufen, Es gibt Liste..so wird valueMap immer Liste zurückgeben , wegen Multi-Eigenschaften, unabhängig von der Kardinalität.SINGLE oder Kardinalität.LISTE? (und cardinality.LIST kann nur eine Liste von Werten für denselben Eigenschaftsschlüssel haben) – User12345

Verwandte Themen