2016-09-26 5 views
1

I-Daten als so strukturiert haben:Groupcount von mehreren Werten

{ 
    number: Integer 
    letter: String 
} 

Ich möchte wie so eine Gruppe Zählung von beiden Eigenschaften tun:

g.V().values('number', 'letter').groupCount(); 

und sehen die Daten als so angezeigt :

[[1,A]:16, [1,B]:64, [2,A]:78, [2,B]:987] 

Gibt es eine Möglichkeit, dies in tinkerpop zu tun?

Antwort

4

Eine einfache

g.V().groupCount().by(values('number', 'letter').fold()) 

sollte es tun.

0

Ich würde es vorziehen, lambdas wenn möglich zu vermeiden; aber so kann es mit einem Lambda gemacht werden (wenn es ohne Lambda nicht möglich ist).

Map<String, Map<Integer, Integer> map = new HashMap<>(); 
g.V().sideEffect(it -> { 
    String letter = (String) it.get().property("letter").value()); 
    Integer number = (Integer) it.get().property("number").value()); 
    if (map.get(letter) == null) 
     map.put(letter, new HashMap<>()); 
    if (map.get(letter).get(number) == null) 
     map.get(letter).put(number, 1); 
    else 
     map.get(letter).put(number, map.get(letter).get(number) + 1); 
}).iterate(); 

Es ist ungefähr die gleiche Geschwindigkeit wie

g.V().values('number', 'letter').groupCount();