Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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 在ArrayList上使用比较器<;E>;_Java_Comparator - Fatal编程技术网

Java 在ArrayList上使用比较器<;E>;

Java 在ArrayList上使用比较器<;E>;,java,comparator,Java,Comparator,我一直在尝试使用如下所示的自定义比较器对ArrayList进行排序 @Override public int compare(Dog d1, Dog d2){ return Integer.compare(d1.tired, d2.tired); }; 现在,在我继续前进之前,我想做的就是: public static <E> ArrayList<E> listBiggest(ArrayList<E> list) { Dog dogcompa

我一直在尝试使用如下所示的自定义比较器对
ArrayList
进行排序

@Override
public int compare(Dog d1, Dog d2){
    return Integer.compare(d1.tired, d2.tired);
};
现在,在我继续前进之前,我想做的就是:

public static <E> ArrayList<E> listBiggest(ArrayList<E> list) {
    Dog dogcomparator = new Dog();
    Collections.sort(list, dogcomparator);
}
公共静态ArrayList最大(ArrayList列表){
狗狗比较器=新狗狗();
集合。排序(列表、dogcomparator);
}
虽然我不能对列表进行排序,因为它是一个很明显的列表,它没有符合comparator类型的对象,尽管列表都是该类型或扩展它的对象

我不确定我做错了什么

我得到的错误是

Error:(15, 20) java: no suitable method found for sort(java.util.ArrayList<E>,Dog)
method java.util.Collections.<T>sort(java.util.List<T>) is not applicable
  (cannot infer type-variable(s) T
    (actual and formal argument lists differ in length))
method java.util.Collections.<T>sort(java.util.List<T>,java.util.Comparator<? super T>) is not applicable
  (inference variable T has incompatible bounds
    equality constraints: E
    lower bounds: Dog,java.lang.Object)
错误:(15,20)java:找不到适合排序的方法(java.util.ArrayList,Dog)
方法java.util.Collections.sort(java.util.List)不适用
(无法推断类型变量)T
(实际参数列表和正式参数列表长度不同))
方法java.util.Collections.sort(java.util.List,java.util.Comparator你有一个
列表
,你想用
比较器对它进行排序。编译器不知道什么是
E
;据它所知,
E
可能是
人。

如果您确定这是一个狗的列表,请将其投下。

更改方法的签名。如果其中的所有内容都需要某种
狗,请声明

public static <E extends Dog> List<E> listBiggest(List<E> list) {
公共静态列表最大(列表列表){
最好以与Collections.sort
相同的方式声明
List
ArrayList
实现的接口)。这将允许该方法用于任何类型的列表,而不仅仅是一个特定的实现


您还需要在方法中添加一个
返回
,或者使方法返回类型
无效

您是否混淆了comparator和comparable?On
Dog dogcomparator=new Dog()
,那不是狗的比较器,那只是狗。你得到的错误是什么?是否有堆栈跟踪?如果没有,用输入和输出显示你希望得到什么和得到什么。@Vitruvius我有一个比较方法作为我的狗类的一部分。我的假设是给它一个狗对象将使用它的比较器。@AbhijitSarkar我包括在内我得到的错误。我将我的ArrayList导出以使用我创建的comparator对其进行排序,这很有意义,为什么它不起作用。现在,在我尝试对列表进行排序之前,是否有一种方法可以这样做,以便在调用此特定方法之前保留通用列表?@Yalnix我不确定你在问什么。我建议你暂停一下复制你在互联网上找到的粘贴代码,然后拿起一本Java书籍。首先不需要这种方法,但那是另一回事。