Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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中基于不同对象类型修改列表的位置_Java - Fatal编程技术网

java中基于不同对象类型修改列表的位置

java中基于不同对象类型修改列表的位置,java,Java,长期读者/第一次海报。我不熟悉java和软件开发,所以如果这是一个糟糕的问题,请原谅我 我目前有一个名为ItemsOrderManager的类,它有一个它维护的Item对象列表,称之为ItemsOrder。当构建ItemsOrderManager类时,此列表将按照正确的顺序使用一些默认项进行实例化 然后我有另一个名为Timeline的类,它有一个事件的HashMap,其中该事件的日期时间是HashMap的键(即HashMap Date,Event)。Event有几个扩展它的子类(即EventA、

长期读者/第一次海报。我不熟悉java和软件开发,所以如果这是一个糟糕的问题,请原谅我

我目前有一个名为ItemsOrderManager的类,它有一个它维护的Item对象列表,称之为ItemsOrder。当构建ItemsOrderManager类时,此列表将按照正确的顺序使用一些默认项进行实例化

然后我有另一个名为Timeline的类,它有一个事件的HashMap,其中该事件的日期时间是HashMap的键(即HashMap Date,Event)。Event有几个扩展它的子类(即EventA、EventB、EventC等),因为它们做的事情不同/彼此略有不同/但共享相似的方法/属性

我的问题是ItemsOrderManager类需要按日期顺序处理事件的时间线,这些事件决定如何修改ItemsOrder列表。它将在列表中查找特定项,然后:

  • 更改项目的某些属性,或
  • 在其前面添加新项目
  • 在它之后添加一个新项目
它是如何做的取决于它是什么类型的事件

它看起来像这样:

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
    }
}