Я понял, что Hypergraph.getVertices()
- это библиотечный метод, который нельзя изменять. Таким образом, вы должны управлять результатом вызова этого метода. Сортировка - это вариант здесь, как предлагает ответ Ямила .
Но для этого требуется, чтобы либо ваша реализация <V>
(MyGraph.MyVertex
в вашем примере) реализовывала java.lang.Comparable
, либо что вы предоставляете реализацию java.util.Comparator
, которая обеспечивает статический c порядок сортировки для ваших вершин.
А java.util.Collections.sort()
принимает List
в качестве аргумента; экземпляр List
также всегда является экземпляром Collection
, но, к сожалению, не каждый экземпляр Collection
является экземпляром List
- это может быть Set
или даже что-то совершенно странное ...
Учитывая это и предполагая, что VertComparator
является компаратором, о котором я говорил, ваше решение может выглядеть следующим образом:
…
VertComparator comparator = new VertComparator();
List<MyGraph.MyVertex> vertCollection = new ArrayList<>( graph.getVertices() );
Collections.sort( vertCollection, comparator );
…
Если весь другой код в вашей программе работает только с Collection
экземплярами вершин (это означает, что где-то не делается никаких скрытых предположений, что это за коллекция), вы должны быть в безопасности.
К сожалению, даже если возвращенный Collection
уже является экземпляром List
(… instanceof List
дает true), Collections.sort()
может не работать: создайте свой список с помощью List.of()
и попытайтесь отсортировать его ...
Довольно часто, когда метод возвращает Collection
, который каким-то образом представляет внутренний статус объект, это неизменяемая коллекция. Очевидно, что и здесь сортировка не удастся. Так что единственный безопасный способ - скопировать результат и отсортировать копию.