我一直试图在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);
请举例说明如何做到这一点。