我目前正在学习如何使用Java中的列表。我通过使用Collections.sort()方法遇到了列表中的字符串排序,并且工作正常。但是,当我创建用户定义的数据类型时,它不会排序并给出错误 -
“找不到合适的排序方法(列表)
方法Collections.sort(List,Comparator)不适用
(无法从参数实例化,因为实际和形式参数列表的长度不同)
方法Collections.sort(List)不适用
(推断类型不符合声明的界限)
推断:孩子
bound(s):可比较)
其中T#1,T#2是类型变量:
T#1扩展了在方法排序中声明的Object(List,Comparator)
T#2扩展了方法排序(List)中声明的Comparable“
如何为用户定义的类型排序元素?
这是代码 -
package works;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;
class Child
{
private String name;
public Child(String name)
{
this.name=name;
}
@Override
public String toString()
{
return name;
}
}
class LOL
{
void Meth()
{
Child s1 = new Child("Hi");
Child s2 = new Child("Bye");
Child s3 = new Child("And");
List<Child> f1 = Arrays.asList(s1,s2,s3);
System.out.println(f1);
System.out.println();
Collections.sort(f1); // This line is the erroneous line.
}
}
public class SortColl
{
public static void main(String X[])
{
LOL l = new LOL();
l.Meth();
}
}
答案 0 :(得分:5)
在Child
类
Comparable
class Child implements Comparable<Child>{
private String name;
public Child(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
@Override
public int compareTo(Child child) {
return name.compareTo(child.name);
}
}
答案 1 :(得分:4)
要对任何对象的集合进行排序,必须满足以下条件之一:
Comparable
。在这种情况下,请实施Comparable<Child>
。然后Collections.sort
将能够使用compareTo
方法进行排序。Comparator
的类,特别是Comparator<Child>
,并将该类的实例作为第二个参数传递给Collections.sort
。然后排序算法将使用Comparator
对集合进行排序。