Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按不同的变量对对象进行排序?_Java_Sorting_Comparable_Compareto - Fatal编程技术网

Java 如何按不同的变量对对象进行排序?

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

我可以使用带有第二个参数的compareTo()方法按不同的变量对对象进行排序,还是应该使用其他方法

例如:

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