gpt4 book ai didi

java - 集合排序列表包含 2 个对象

转载 作者:行者123 更新时间:2023-11-29 08:39:24 25 4
gpt4 key购买 nike

我有一个列表,其中包含 2 个类型为 Department 的对象s 和 Manager

我需要按 Department 的字母顺序对列表进行排序秒。 Department类(class)工具Comparable<Department>并且有方法 compareTo .但是我收到一条错误消息:

"The method sort(List, Comparator) in the type Collections is not applicable for the arguments (List, new Comparator(){})"

public static List<?> getLst(String fileName)throws FileNotFoundException, IOException,ClassNotFoundException {
List<Object> lst = new LinkedList<>();
BufferedInputStream f;
try(ObjectInputStream i = new ObjectInputStream(f=new BufferedInputStream(new FileInputStream(fileName)))){
while (f.available()>0) {
lst.add(i.readObject());
}

Collections.sort(lst, new Comparator<Department>() {
@Override
public int compare(Department object1,Department object2) {
return object1.getDepName().compareTo(object2.getDepName());
}
});
}
return lst;
}

最佳答案

您没有正确使用泛型。

Collections.sort()想要:

  • 一个List<T>
  • 匹配Comparator<T>

您正在提供一个对象列表;而是一个部门比较器。那根本行不通。

因此,解决此问题的一种方法 - 首先更改您的列表以使用正确的通用类型:

List<Department> departments = new ArrayList<>();

然后……添加(现在必需的)转换,以便可以将传入的“对象”添加到该部门列表中 - 如果它具有正确的类型!

 Object fromStream = i.readObject();
if (fromStream instanceof Department) {
departments.add( (Department) fromStream);
} else {
// consider what to do with managers objects ...

( 请注意:lst 是一个糟糕的名称;它表示什么都没有,而且一个保存的字符增加了混淆。使用表达背后含义的名称是关于;喜欢 departments 以明确:包含的东西,复数形式的部门)

更新:泛型提示您这里有一个设计问题。如果您想对部门进行排序,那么包含部门的列表应该包含任何其他内容。

换句话说:这里真正的答案是使用包含不同类型对象的一个列表,而是使用两个列表反而。

关于java - 集合排序列表包含 2 个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41465589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com