我想从Guava创建一个MutableGraph类型的对象,如下所示:
MutableGraph<Integer> subgraph = GraphBuilder.undirected().nodeOrder(ElementOrder.insertion()).build();
当我使用迭代器从图中获取节点时,顺序就是它们的插入。我需要使它们反向,以便可以通过调用一次来检索最后添加的顶点
subgraph.nodes().iterator().next()
最佳答案
Graph
将节点存储在引擎盖下的map中,而for ElementOrder.insertion()
it's LinkedHashMap
。因为使用了此类映射的Graph#nodes()
keySet()
,所以除了遍历所有元素并返回最后一个元素外,没有更好的方法来获取最后一个值。幸运的是,番石榴中有一个helper method Iterables#getLast(Iterable)
for that:
Integer last = Iterables.getLast(subgraph.nodes());
如果您不希望代码为空图抛出
NoSuchElementException
,请使用具有默认值的重载,例如:Integer last = Iterables.getLast(subgraph.nodes(), null);
(上面还有方法的
Iterators
counterparts。)