Определить условия оператора if по парам и только по одному параметру объекта

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

public static class Point {

  public int x;
  public int y;
  public String type;

  public  Point(int x, int y, String type) 
  {

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

  @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;
  }
}

Я могу пройтись по всем своим вершинам и получить преемника каждой точки следующим образом:*

 for (Point myPoint : directedGraph.vertexSet ()) {
      for (Point successor : Graphs.successorListOf (directedGraph, myPoint)){
 // Add if statement
 }
}

Мне нужно определить условия оператора if парами, но только для одного или двух параметров Point. Например, это мои точки:

public static Point startPoint = new Point(2, 6, "A");
public static Point firstPoint = new Point(2, 7, "A");
public static Point secondPoint = new Point(2, 8, "B");
public static Point thirdPoint = new Point(2, 9, "B");
public static Point fourthPoint = new Point(2, 10, "B");
public static Point fifthPoint = new Point(3, 7, "C");
public static Point sixthPoint = new Point(4, 7, "C");
public static Point seventhPoint = new Point(5, 7, "C");

Я хотел бы иметь условие, чтобы быть уверенным, что myPoint и преемник не имеют определенного «типа»:

for (Point myPoint : directedGraph.vertexSet ()) {
          for (Point successor : Graphs.successorListOf (directedGraph, myPoint)){
     if ((myPoint,successor) != (myPoint.type.equals("A"), successos.type.equals("B") && (myPoint,successor)!= (myPoint.type.equals("A"), successos.type.equals("C")){
// Do what I want
      } 
     }
    }

Итак, мне нужно поставить условие на пару точек, но только на один параметр моих Point объектов [пара (myPoint и преемник) не может быть соответственно (тип A и тип B) и (тип A и типа С).

Возможно ли это сделать таким образом? Я не смог найти никаких ресурсов по этому поводу (и у меня возникли проблемы с формулировкой моего вопроса, поэтому это не помогло)


person Graham Slick    schedule 06.08.2015    source источник


Ответы (1)


просмотрите javatuples, которые вы можете создать самостоятельно, как описано в этом сообщении https://stackoverflow.com/a/10631692/3944563

Но это может выглядеть некрасиво. вы бы делали что-то подобное,

//define your tuple class
class myTuple
{
 final String T1;
 final String T2;
 public myTuple(String t1, String t2)
{
  T1 = t1;
  T2 = t2;
}

if(myTupple(myPoint.type, successos.type) == myTupple("A", "B"))
{ /* do something */ }`

в любом случае, я не думаю, что вы можете сделать это красиво, но вы поняли идею.

Что бы я сделал, это добавить статический метод к этому классу с именем "validateType" или что-то еще, и передать две точки и проверить там

person RAEC    schedule 06.08.2015