如何在Guava Table值中按排序顺序插入值

时间:2015-02-08 09:48:38

标签: java collections gson guava

我一直试图在Guava的Table结构中按排序顺序插入一些值,下面是我的代码

NodeDetails node1 = new NodeDetails();
NodeDetails node2 = new NodeDetails();
NodeDetails node3 = new NodeDetails();

node1.setCLOUDTYPE("aws");
node1.setNODENAME("node1");

node2.setCLOUDTYPE("cloudstack");
node2.setNODENAME("node2");

node3.setCLOUDTYPE("azure");
node3.setNODENAME("node3");

Table<String, String, Object> table = TreeBasedTable.create();
    table.put("vmstat_usage", "cpu_idle", node1);
    table.put("vmstat_usage", "cpu_idle", node2);
    table.put("vmstat_usage", "cpu_idle", node3);
    table.put("vmstat_usage_percent", "cpu_system", node3);

Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting()
                    .create();
System.out.println(gson.toJson(table.rowMap()));

这里NodeDetails正在实现我想要对值进行排序的Comparable ......但是当我采用rowMap的值时,同样会覆盖现有值。所以只有一个物体在返回。

如果我创建TreeMultimap,我可以正确地将所有对象插入集合中。

我试图通过这种方式创造这种反应。

{
  "vmstat_usage": {
    "cpu_idle":      {
        "CLOUD_TYPE": "azure",
        "NODE_NAME": "node3",
      },
      {
        "CLOUD_TYPE": "aws",
        "NODE_NAME": "node1",
      },
      {
        "CLOUD_TYPE": "cloudstack",
        "NODE_NAME": "node2",
        "NODE_PRIVATE_IP_ADDRESS": null
      }
  },
  "vmstat_usage_percent": {
    "cpu_idle": {
      "CLOUD_TYPE": "azure",
      "NODE_NAME": "node3",
    }
  }
}

我已经浏览了这个链接Sorting Guava table on values,发现&#34; table.rowMap返回一个SortedMap&gt;。因此,地图按其行键排序,但地图值是未排序的地图&#34;
正如Java Sort a Guava TreeBasedTable所建议的那样,我可以使用已定义的比较器创建一个新的TreeTable,并将我之前的表放在那里或http://www.wenda.io/questions/2486554/sorting-guava-tables-in-descending-order-based-on-values.html我可以在创建表时创建新的Ordering。

我试过这样的事情,但它没有用。

Table<String, String, NodeDetails> table2 = TreeBasedTable.create(Ordering.natural(), Ordering.natural());
table2.putAll(table);

请举例说明如何做到这一点。

0 个答案:

没有答案