Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/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 集合排序列表包含2个对象_Java_Sorting_Collections - Fatal编程技术网

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,并为此构建比较器
      错误消息未正确显示。它是“排序方法”(List,ComparatorWell,你不能用Comparator对列表进行排序。你可以尝试创建一个Comparator,看看每个对象是否属于Department类型。你已经破坏了类型安全性……不要创建
      列表
      ,相反,如果你必须在
      列表中有多个类型,请创建一个父类,并让其他类
      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 ...