2016-09-26 31 views
1

我已经数据结构为这样:GroupCount由多个值

{ 
    number: Integer 
    letter: String 
} 

我想通过这两个属性,像这样做的一组数:

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

,看看数据显示为使:

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

有没有办法在tinkerpop中做到这一点?

回答

4

简单

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

应该做的伎俩。

0

如果可能的话,我宁愿避免使用lambda表达式;但这是如何用lambda来完成的(如果在没有lambda的情况下不可能做到这一点)。

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(); 

这是大致相同的速度

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