java中基于不同对象类型修改列表的位置
长期读者/第一次海报。我不熟悉java和软件开发,所以如果这是一个糟糕的问题,请原谅我 我目前有一个名为ItemsOrderManager的类,它有一个它维护的Item对象列表,称之为ItemsOrder。当构建ItemsOrderManager类时,此列表将按照正确的顺序使用一些默认项进行实例化 然后我有另一个名为Timeline的类,它有一个事件的HashMap,其中该事件的日期时间是HashMap的键(即HashMap Date,Event)。Event有几个扩展它的子类(即EventA、EventB、EventC等),因为它们做的事情不同/彼此略有不同/但共享相似的方法/属性 我的问题是ItemsOrderManager类需要按日期顺序处理事件的时间线,这些事件决定如何修改ItemsOrder列表。它将在列表中查找特定项,然后:java中基于不同对象类型修改列表的位置,java,Java,长期读者/第一次海报。我不熟悉java和软件开发,所以如果这是一个糟糕的问题,请原谅我 我目前有一个名为ItemsOrderManager的类,它有一个它维护的Item对象列表,称之为ItemsOrder。当构建ItemsOrderManager类时,此列表将按照正确的顺序使用一些默认项进行实例化 然后我有另一个名为Timeline的类,它有一个事件的HashMap,其中该事件的日期时间是HashMap的键(即HashMap Date,Event)。Event有几个扩展它的子类(即EventA、
- 更改项目的某些属性,或
- 在其前面添加新项目
- 在它之后添加一个新项目
public class ItemsOrderManager {
private List<Item> items = new ArrayList<Item>();
private Timeline timeline;
Public ItemsOrderManager() {
initialiseItems(); //add items to the items list
initialiseTimeline(); //for simplicity i put this here to show the timeline gets initialised/we set the events in it and then sort the hashmap
processTimeline(); //again for simplicity just showing we need to then process the timeline which modifies the items list
}
}
或者我应该这样做:
public void processTimeline() {
for (Event event : timeline.getEvents().values()) {
//call something like event.applyEventToList(this.items); to modify the list or returned the modified list
}
}
还是有更好的办法?如果这是一个愚蠢的问题,请提前道歉。因为这两种解决方案都有效,所以您可以选择其中一种。这更像是一个哲学问题,是关于作为开发人员的原则 例如,一个面向对象的爱好者可能会说,
事件
类是知道如何操作项目列表的实体,因此第二个代码片段将是选择。但是,在本例中,我个人发现使用orchestrator对象来进行处理更简单,因此我选择第一种方法
顺便问一下,您是否确保迭代器
for(事件:timeline.getEvents().values())
提供有序事件?我将为每种项目类型创建一个“管理器”,并从映射中获取相应的管理器对象:managerMap.get(event.class).manage(event,timline)代码>在事件hashmap中使用时间戳(以秒/毫秒为单位)作为键,然后获取此键集,按日期对其排序,然后使用此排序列表访问事件列表,怎么样?
public void processTimeline() {
for (Event event : timeline.getEvents().values()) {
//call something like event.applyEventToList(this.items); to modify the list or returned the modified list
}
}