Guava: MutableGraph с nodeOrder, который является обратной вставкой - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу создать объект типа MutableGraph из Guava, например:

MutableGraph<Integer> subgraph = GraphBuilder.undirected().nodeOrder(ElementOrder.insertion()).build();

Когда я использую итератор для получения узлов из графика, порядок их вставки. Мне нужно получить их в обратном порядке, чтобы я мог извлечь эту последнюю добавленную вершину одним вызовом

subgraph.nodes().iterator().next()

1 Ответ

0 голосов
/ 01 апреля 2020

Graph хранит узлы на карте под капотом, а для ElementOrder.insertion() это LinkedHashMap. Для Graph#nodes() keySet() такой карты используется, так что нет лучшего способа получить последнее значение, кроме итерации по всем элементам и возврата последнего. К счастью, есть вспомогательный метод Iterables#getLast(Iterable) для этого в Гуаве:

Integer last = Iterables.getLast(subgraph.nodes());

Если вы хотите, чтобы код не выбрасывал NoSuchElementException для пустых графиков, используйте перегрузку со значением по умолчанию, например как:

Integer last = Iterables.getLast(subgraph.nodes(), null);

(Есть также Iterators дубликаты описанных выше методов.)

...