如果元组是预定义的类,那么如何对元组数组进行排序,而不使用Java中的实现比较器



我有一个预定义的元组类,不能按如下方式修改:

public class Tuple {
    protected String name; 
    public Tuple(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

我有另一个类,它定义了上面元组的数组:

public class Stack {
    protected ArrayList<Tuple> tupleLst; 
    public Stack(){
        this.tupleLst=new ArrayList<Tuple>(10);
    }
}

然后我需要对另一个类中的元组数组进行排序:例如:

public class Algo {
    public static int Sort(Relation r){
    }
    public static void main(String[] arg){
    Algo.Sort();
}

关系r是元组的输入数组。我在网上搜索过,在那里我看到很多人实际上都在使用Comparators和Collections.sort()来做这件事。然而,在我尝试之后,我注意到Tuple类需要实现比较器才能进行排序。如何在不更改前两个类的情况下对元组进行排序?提前谢谢!

尽管Tuple无法修改,但您可以实现自己的Comparator,然后将其传递给Collections.sort()方法(该方法将根据比较器规则对元组进行某种收集)。例如:

Comparator<Tuple> myComparator = new Comparator<Tuple>() {
    public int compare(Tuple t1, Tuple t2) {
        //the comparison rules go here
    }
};
Collections.sort(tupleList, myComparator);

如果你使用Java8,你可以在一行中实现这一点:

myList.sort((t1, t2) -> { <comparison rules implementation> });

或(感谢@MarkoTopolnik)

myList.sort(Comparator.comparing(t -> <<get sort key from t>>) 

我认为您混淆了两种方法。一种方法是让Tuple类实现Comparable接口。我认为这是你想要避免的,因为你似乎不想修改Tuple类。

另一种方法是定义一个新类,其目的是比较两个元组。这就是所谓的比较器。如果您传递元组列表和该比较器的一个实例,那么您可以在不修改元组类的情况下以任何方式对元组进行排序。

最新更新