Java 按订单分组计数

Java 按订单分组计数,java,gremlin,simplegraph,Java,Gremlin,Simplegraph,下面simplegraph core testsuite中的单元测试代码显示了机场的区域计数,但它并不像我预期的那样订购 结果首先是: NZ-BOP= 3 MZ-A= 1 MZ-B= 1 IN-TN= 5 MZ-N= 1 PW-004= 1 MZ-I= 2 BS-FP= 1 IN-TR= 1 MZ-T= 1 BJ-AQ= 1 GB-ENG= 27 我调查 并在标记为gremlin的问题中搜索“GroupCount”,但没有结果 解决订购问题需要什么? 单元测试 另

下面simplegraph core testsuite中的单元测试代码显示了机场的区域计数,但它并不像我预期的那样订购

结果首先是:

NZ-BOP=  3
MZ-A=  1
MZ-B=  1
IN-TN=  5
MZ-N=  1
PW-004=  1
MZ-I=  2
BS-FP=  1
IN-TR=  1
MZ-T=  1
BJ-AQ=  1
GB-ENG= 27
我调查

并在标记为gremlin的问题中搜索“GroupCount”,但没有结果

解决订购问题需要什么?

单元测试 另见

@测试
public void testSortedGroupCount()引发异常{
图形=getAirRoutes();
GraphTraversalSource g=graph.traversal();
地图计数=g.V().hasLabel(“机场”).groupCount()
.by(“region”).order().by(order.decr).next();
assertEquals(1473,counts.size());
for(对象键:counts.keySet()){
System.out.println(String.format(“%s=%3d”,key,counts.get(key));
}
}

您需要使用
local
作用域对
值进行排序:

g.V().hasLabel("airport").
  groupCount().
    by("region").
  order(local).
    by(values, Order.decr)
使用
local
在当前遍历器中确定您的顺序(即在遍历中对每个
Map
的内容进行排序)


仅使用Gremlin语言,您可以使用unfold方法来完成。如果需要通过RESTAPI运行查询,这可能很有用

g.V()
.hasLabel(“机场”)
.价值观(“区域”)
.groupCount()
.展开()
.order()
.by(价值观)

这是groovy解决方案。我试图将其转换为java,但只找到订单(…)部分的Scope.local。对于by(),我没有找到适合您答案的双参数函数。只有对您的建议进行修改,才会导致类强制转换异常。看看我刚刚签入的修改后的测试用例,它不是一个真正的“Groovy”答案。静态导入是Java和groovy的一种构造,因此groovy没有什么特别之处。对于
,您需要
org.apache.tinkerpop.gremlin.structure.Column
。这里是您将要使用的
by()
的重载:我在教程/书中几乎有这个确切的例子,以防它有所帮助
g.V().hasLabel("airport").
  groupCount().
    by("region").
  order(local).
    by(values, Order.decr)
  @Test
  public void testSortedGroupCount() throws Exception {
    Graph graph = getAirRoutes();
    GraphTraversalSource g = graph.traversal();
    Map<Object, Long> counts = g.V().hasLabel("airport").groupCount()
        .by("region").order(Scope.local).by(Column.values,Order.decr).next();
    // https://stackoverflow.com/a/49361250/1497139
    assertEquals(1473, counts.size());
    assertEquals("LinkedHashMap",counts.getClass().getSimpleName());
    debug=true;
    if (debug)
      for (Object key : counts.keySet()) {
        System.out.println(String.format("%s=%3d", key, counts.get(key)));
      }

  }
US-AK=149
AU-QLD= 50
CA-ON= 46
CA-QC= 44
PF-U-A= 30
US-CA= 29