根据列表元素自动创建对象

时间:2015-08-03 22:29:33

标签: java processing jgrapht digraphs

我使用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()及其前身使用predecessorListOf()来检索顶点的后继。

我想在顶点的前身及其后继者之间添加边缘(在我的例子中,总是只有一个前身但很多后继者)。所以我想做一些像:

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

但是这些方法并不将顶点列表作为参数,一次只能作为一个顶点。 我应该做的是为每个后继者和前任者自动创建一个Point对象,但它似乎不合适,因为这些元素已经是顶​​点,所以它们也是Point对象。

我该怎么做?我不知道如何根据后继者或前任列表创建对象。这是处理这个问题的正确方法吗?

1 个答案:

答案 0 :(得分:2)

我不知道jgrapht库,但你不能简单地遍历前任和后继点列表:

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