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