Автоматически создавать объекты на основе элементов списка

Я создал орграф, используя библиотеку jgrapht, и мои вершины — это объекты Point, которые я создал с помощью этого кода:

public static class Point {

  public int x;
  public int y;

  public  Point(int x, int y) 
  {

    this.x = x;
    this.y = y;
  }
  @Override
    public String toString() {
    return ("[x="+x+" y="+y+"]");
  }

  @Override
    public int hashCode() {
    int hash = 7;
    hash = 71 * hash + this.x;
    hash = 71 * hash + this.y;
    return hash;
  }



  @Override
    public boolean equals(Object other) 
  {
    if (this == other)
      return true;

    if (!(other instanceof Point))
      return false;

    Point otherPoint = (Point) other;
    return otherPoint.x == x && otherPoint.y == y;
  }
}

Я могу получить преемников вершины с помощью функции SuccessorListOf(), а ее предшественников — с помощью PregenceListOf().

Я хотел бы добавить ребра между предшественником вершины и ее преемниками (в моем случае всегда есть только один предшественник, но много преемников). Итак, я хотел бы сделать что-то вроде:

directedGraph.addEdge(Graphs.predecessorListOf(directedGraph,myPoint),Graphs.successorListOf(directedGraph,myPoint));

Но эти методы не принимают в качестве аргументов список вершин, а только одну вершину за раз. Что я должен сделать, так это автоматически создать объект Point для каждого преемника и для предшественника, но это не кажется подходящим, поскольку эти элементы уже являются вершинами, поэтому они также являются объектами Point.

Как я могу это сделать ? Я не знаю, как создавать объекты на основе списка преемников или предшественников. Это правильный способ справиться с этим?


person Graham Slick    schedule 03.08.2015    source источник
comment
Почему кто-то проголосовал против этого ...?   -  person Graham Slick    schedule 04.08.2015
comment
У кого-то может быть дурацкий бронзовый значок за голосование против. Я собираюсь почти так же глупо, как исчерпание 20 ежедневных голосов ;-)   -  person Javier    schedule 04.08.2015


Ответы (1)


Я не знаю библиотеку jgrapht, но вы не можете просто перебрать список точек предшественника и преемника:

for (Point predecessor : Graphs.predecessorListOf(directedGraph, myPoint)) {
    for (Point successor : Graphs.successorListOf(directedGraph, myPoint)) {
        directedGraph.addEdge(predecessor, successor);
    }
}
person armen    schedule 03.08.2015