Java 如何按不同的变量对对象进行排序?
我可以使用带有第二个参数的compareTo()方法按不同的变量对对象进行排序,还是应该使用其他方法 例如:Java 如何按不同的变量对对象进行排序?,java,sorting,comparable,compareto,Java,Sorting,Comparable,Compareto,我可以使用带有第二个参数的compareTo()方法按不同的变量对对象进行排序,还是应该使用其他方法 例如: public class Girl implements Comparable<Girl> { private String fName; private String lName; private int hotness; public Girl () {} // blah blah constructor @Override
public class Girl implements Comparable<Girl> {
private String fName;
private String lName;
private int hotness;
public Girl () {} // blah blah constructor
@Override
public int compareTo (Girl g, int order) {
if (order == 1) // then sort by first name
if (order == 2) // then sort by last name
if (order == 3) // then sort by hotness
}
}
公共类女孩{
私有字符串fName;
私有字符串名称;
私密内热;
公共女孩(){}//诸如此类
@凌驾
公共整数比较(女孩g,整数顺序){
如果(order==1)//则按名字排序
如果(order==2)//则按姓氏排序
如果(顺序==3)//则按热度排序
}
}
您没有重写compareTo
方法,而是重载它。并且用@Override
标记将不允许编译该类
使用多个
Comparator
类根据直接场景比较女孩。您并没有覆盖compareTo
方法,而是重载它。并且用@Override
标记将不允许编译该类
使用多个Comparator
类根据直接场景比较女孩。您并没有覆盖compareTo
方法,而是重载它。并且用@Override
标记将不允许编译该类
使用多个Comparator
类根据直接场景比较女孩。您并没有覆盖compareTo
方法,而是重载它。并且用@Override
标记将不允许编译该类
使用多个Comparator
类根据直接场景比较女孩。不,不能。你会发现代码没有编译--@Override
注释说compareTo(Girl,int)
必须在超类或接口中声明,但它不是<代码>可比性
仅定义可比性(女孩)
相反,您应该为每个订单使用比较器。这是一个类,它提供了自己的
比较器
,可以容纳两个女孩。然后可以创建不同的比较器,并将适当的比较器传递给需要它的函数。换句话说,从Girl
中删除order
字段,而是将不同的排序作为比较器的不同实例来实现
大多数采用T的类或函数也有采用T
和比较器的版本。这方面的一个例子是。另一个是,它可以在构建时使用比较器
如果这看起来很烦人或迂腐,想想你会如何使用这样的功能。假设你的函数取一个T
。通过调用item1.compareTo(item2)
,根据Comparable
界面,尝试比较其中的两个。如果您的代码已编译,则该方法将不存在!请注意,Java没有默认参数,因此无法说“如果它们没有按int顺序传递,则假定为0。”不,不能。你会发现代码没有编译--@Override
注释说compareTo(Girl,int)
必须在超类或接口中声明,但它不是<代码>可比性
仅定义可比性(女孩)
相反,您应该为每个订单使用比较器。这是一个类,它提供了自己的
比较器
,可以容纳两个女孩。然后可以创建不同的比较器,并将适当的比较器传递给需要它的函数。换句话说,从Girl
中删除order
字段,而是将不同的排序作为比较器的不同实例来实现
大多数采用T的类或函数也有采用T
和比较器的版本。这方面的一个例子是。另一个是,它可以在构建时使用比较器
如果这看起来很烦人或迂腐,想想你会如何使用这样的功能。假设你的函数取一个T
。通过调用item1.compareTo(item2)
,根据Comparable
界面,尝试比较其中的两个。如果您的代码已编译,则该方法将不存在!请注意,Java没有默认参数,因此无法说“如果它们没有按int顺序传递,则假定为0。”不,不能。你会发现代码没有编译--@Override
注释说compareTo(Girl,int)
必须在超类或接口中声明,但它不是<代码>可比性
仅定义可比性(女孩)
相反,您应该为每个订单使用比较器。这是一个类,它提供了自己的
比较器
,可以容纳两个女孩。然后可以创建不同的比较器,并将适当的比较器传递给需要它的函数。换句话说,从Girl
中删除order
字段,而是将不同的排序作为比较器的不同实例来实现
大多数采用T的类或函数也有采用T
和比较器的版本。这方面的一个例子是。另一个是,它可以在构建时使用比较器
如果这看起来很烦人或迂腐,想想你会如何使用这样的功能。假设你的函数取一个T
。通过调用item1.compareTo(item2)
,根据Comparable
界面,尝试比较其中的两个。如果您的代码已编译,则该方法将不存在!请注意,Java没有默认参数,因此无法说“如果它们没有按int顺序传递,则假定为0。”不,不能。你会发现
void inSomeMethod() {
final int order = 0; // has to be final
Collections.sort(new ArrayList<Girl>(), new Comparator<Girl>() { // for example
@Override
public int compare(Girl o1, Girl o2) {
if (order == 1) // then sort by first name
if (order == 2) // then sort by last name
if (order == 3) // then sort by hotness
return 0;
}
});
}