Java 集合排序列表包含2个对象
我有一个列表,其中包含两个类型为Java 集合排序列表包含2个对象,java,sorting,collections,Java,Sorting,Collections,我有一个列表,其中包含两个类型为Departments和Managers的对象 我需要按部门s按字母顺序对列表进行排序。Department类实现了compariable,并具有方法comparieto。但我收到一条错误消息: 类型中的方法排序(列表、比较器) 集合不适用于参数(列表,新 比较器(){}“ publicstaticlist getLst(字符串文件名)抛出FileNotFoundException、IOException、ClassNotFoundException{ List
Department
s和Manager
s的对象
我需要按部门
s按字母顺序对列表进行排序。Department
类实现了compariable
,并具有方法comparieto
。但我收到一条错误消息:
类型中的方法排序(列表、比较器)
集合不适用于参数(列表,新
比较器(){}“
publicstaticlist getLst(字符串文件名)抛出FileNotFoundException、IOException、ClassNotFoundException{
List lst=newlinkedlist();
缓冲数据流f;
try(ObjectInputStream i=newobjectinputstream(f=newbufferedinputstream(newfileinputstream(fileName))){
而(f.available()>0){
lst.add(i.readObject());
}
Collections.sort(lst,newcomparator(){
@凌驾
公共整数比较(部门对象1、部门对象2){
返回object1.getDepName().compareTo(object2.getDepName());
}
});
}
返回lst;
}
您没有正确使用泛型
想要:
- a
和列表
- 匹配的
比较器
List<Department> departments = new ArrayList<>();
(请注意:lst
是一个坏名字;它说的是什么都没有,而一个保存的字符只会增加混乱。使用名称来表达后面的内容;比如部门
来说明:包含的东西,以及复数形式的部门)
更新:泛型提示您有设计问题。如果要对部门进行排序,则包含部门的列表应不包含任何其他内容
换句话说:这里真正的答案是不要使用一个包含不同类型对象的列表,而是使用两个列表 您没有正确使用泛型 想要:
- a
和列表
- 匹配的
比较器
List<Department> departments = new ArrayList<>();
(请注意:lst
是一个坏名字;它说的是什么都没有,而一个保存的字符只会增加混乱。使用名称来表达后面的内容;比如部门
来说明:包含的东西,以及复数形式的部门)
更新:泛型提示您有设计问题。如果要对部门进行排序,则包含部门的列表应不包含任何其他内容
换句话说:这里真正的答案是不要使用一个包含不同类型对象的列表,而是使用两个列表 将经理和部门放在同一个列表中的设计听起来令人怀疑。您正在为树小部件制作模型吗?有更好的方法 在任何情况下,您都可以执行以下两种操作之一:
- 根据需要提供电容器和铸件(坏主意)
- 或者让Department和Manager使用getDepartment()方法实现HasDepartment,并为此构建比较器李>
- 将经理和部门放在同一个列表中的设计听起来令人怀疑。您正在为树小部件制作模型吗?有更好的方法
在任何情况下,您都可以执行以下两种操作之一:
- 根据需要提供电容器和铸件(坏主意)
- 或者让Department和Manager使用getDepartment()方法实现HasDepartment,并为此构建比较器李>
列表
,相反,如果你必须在
列表中有多个类型,请创建一个父类,并让其他类
关闭它。然后像这样创建您的列表e。)xtend
。这还将允许您在父类中定义一个可供所有子类使用的可比较方法。在您的代码中,您希望如何对list
对象进行排序?每个部门有一个经理吗?或者是任意数量的经理ers和任何数量的部门相互混合?错误消息没有正确显示。它是“排序方法”(List,ComparatorWell,你不能用Comparator对列表进行排序。你可以尝试创建一个Comparator,看看每个对象是否属于Department类型。你已经破坏了类型安全性……不要创建经理
列表
,相反,如果你必须在
列表中有多个类型,请创建一个父类,并让其他类
关闭它。然后像这样创建您的列表e。)xtend
。这还将允许您在父类中定义一个可供所有子类使用的可比较方法。在您的代码中,您希望如何对list
对象进行排序?每个部门有一个经理吗?或者是任意数量的经理ers和任何数量的部门相互混合?感谢您的帮助。但列表包含两个不同的对象。经理不能被强制转换为部门我明白了……但事实上:这不是一个好方法:当您想“仅在d上”排序时,将部门和经理放在同一个列表中是没有意义的经理
Object fromStream = i.readObject(); if (fromStream instanceof Department) { departments.add( (Department) fromStream); } else { // consider what to do with managers objects ...