[英]How do I use an class defined array and add values (pre-defined parameters) to it?
[英]How to sort a array of tuple if the tuple is a pre-defined class without implement comparator in 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类。
另一种方法是定义一个新类,其目的是比较两个元组。 这就是所谓的比较器。 如果传递了元组列表和此比较器的实例,则可以在不修改元组类的情况下以任意方式对元组进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.