如何在java中使用compareTo函数

如何在java中使用compareTo函数,java,Java,我的问题: 假设我有四个点p1,p2,p3,p3。如何使用Pair类比较p1、p2和p2、p3对?如何使用compareTo功能?谢谢您不能使用此选项,因为您的Point类没有实现Comparable。你必须先解决这个问题。事实上,您应该将F和S约束为只实现可比较的类 要约束F和S,请将类声明更改为: public class Point{ public int x; public int y; Point(int x, int y){ this.x = x; this.

我的问题:
假设我有四个点p1,p2,p3,p3。如何使用Pair类比较p1、p2和p2、p3对?如何使用compareTo功能?谢谢

您不能使用此选项,因为您的Point类没有实现Comparable。你必须先解决这个问题。事实上,您应该将F和S约束为只实现可比较的类

要约束F和S,请将类声明更改为:

  public class Point{

public int x;
public int y;

Point(int x, int y){
    this.x = x;
    this.y = y;

}

public String toString(){

    return "(" + x + "," + y + ")";
  }
}
在编写下面的代码时,编译器会告诉您,Point必须实现Compariable

一旦这样做,您可以:

@Override
public int compareTo(Pair<F, S> that) {
    int cmp = this.first.compareTo(that.first);
    if (cmp == 0)
        cmp = this.second.compareTo(that.second);
    return cmp;
}

您不能使用它,因为您的Point类没有实现Comparable。你必须先解决这个问题。事实上,您应该将F和S约束为只实现可比较的类

要约束F和S,请将类声明更改为:

  public class Point{

public int x;
public int y;

Point(int x, int y){
    this.x = x;
    this.y = y;

}

public String toString(){

    return "(" + x + "," + y + ")";
  }
}
在编写下面的代码时,编译器会告诉您,Point必须实现Compariable

一旦这样做,您可以:

@Override
public int compareTo(Pair<F, S> that) {
    int cmp = this.first.compareTo(that.first);
    if (cmp == 0)
        cmp = this.second.compareTo(that.second);
    return cmp;
}

点的可能重复与代码中的对没有关系…点的可能重复与代码中的对没有关系…建议:您应该演示如何执行约束,以帮助泛型不流利的人。@Andreas:时间紧迫,这就是为什么我发布了一个不完整的答案,但把它变成了一个社区维基,因为我没有得到任何支持。如果可以,请随时改进。谢谢建议:你应该展示如何进行约束,以帮助那些泛型不流利的人。@Andreas:我时间紧迫,这就是为什么我发布了一个不完整的答案,但将其作为一个社区wiki,因为我没有获得任何积分。如果可以,请随时改进。谢谢
Pair<Point, Point> pair1 = new Pair<>(p1, p2);
Pair<Point, Point> pair2 = new Pair<>(p3, p4);
int cmp = pair1.compareTo(pair2);