【问题标题】:How to get the updated list in main method如何在 main 方法中获取更新的列表
【发布时间】:2013-11-19 17:17:25
【问题描述】:

我有一个队列列表如下:

公共类队列选择{ 公共列表 initQueueCollection() { QueueLoad d1 = new QueueLoad("QUEUEA1", "QUEUEB1", true); QueueLoad d2 = new QueueLoad("QUEUEA2", "QUEUEB2", false); QueueLoad d3 = new QueueLoad("QUEUEA3", "QUEUEB3", true); QueueLoad d4 = new QueueLoad("QUEUEA4", "QUEUEB4", false); 列表列表 = 新的 ArrayList(); 列表.add(d1); 列表.add(d2); list.add(d3); list.add(d4); 返回列表; }

现在从主方法,我把上面的方法称为,

QueueSelection selection = new QueueSelection();   
List<QueueLoad> queueList =selection.initQueueCollection();  

当第一个输入/文件到来时,检查队列以查看其中哪个是false,所以我正在获取第二个("QUEUEA2", "QUEUEB2", false); 一旦我获取它,我应该将状态更改为true,如("QUEUEA2", "QUEUEB2", true);我正在使用

for (QueueLoad s:queueList) { 如果(s.getStatus()==假) { str1=s.getQueueName1(); str2=s.getQueueName2(); str3=s.getStatus(); 特别收藏=s; System.out.println(s); 特别的Collection.setStatus(真); 特别的Collection.setQueueName1(str1); 特别的Collection.setQueueName2(str2); int j=queueList.indexOf(particularCollection); System.out.println("索引为"+j); s = new QueueLoad(str1, str2, true); newqueueList=queueList.set(j, s);

并且列表已更新。现在,当第二个输入出现时,因为在第一行中看到的是List&lt;QueueLoad&gt; queueList =selection.initQueueCollection(); 它总是得到旧的列表,而不是更新的列表。

请帮忙。

【问题讨论】:

  • 那是因为你一直在初始化它。当您执行此操作时: List list = new ArrayList();在 initQueueCollection() 方法中。
  • 从你的问题中不清楚你在哪里调用 initQueueCollection()。例如,它是否在 for 循环内?
  • @quazzieclodo 我在 for 循环外调用 initQueueCollection()。
  • 您提到 initQueueCollection() 被多次调用。从你的问题来看,我从来没有看到这是怎么发生的。
  • @quazzieclodo,当新输入出现时,我正在调用 initQueueCollection()。对于每一个输入,每个人都会看到状态为“假”的队列,并将其设为“真”。我的问题是,一旦 List 更新为 true,对于第二个输入,应该获取具有更新状态的新列表,以便不应该再次获取之前获取的同一个队列。

标签: java list


【解决方案1】:

现在当第二个输入出现时,因为在第一行它看到 列表 queueList =selection.initQueueCollection();它是 总是得到旧的列表而不是更新的列表。

我将此解释为您不希望在“第二个输入出现时”再次调用 init 方法。

有很多方法可以解决这个问题。例如,您是否考虑过将 init 方法移到 QueueSelection 的构造函数中?

【讨论】:

  • @AmirAfgani public class QueueLoad {private String QueueName1;private String QueueName2;private Boolean Avail;public String getQueueName1(){return QueueName1;}public void setQueueName(String queueName1){QueueName1=queueName1;}public String getQueueName2(){return QueueName2;}public void setQueueName2(String queueName2){QueueName2=queueName2;}public Boolean getStatus(){return Avail;}public void setStatus(Booleanavail){Avail=avail;}public QueueLoadProcess(String queueName1 ,String queueName2, Booleanavail) {this.QueueName1 = queueName1;this.QueueName2 = queueName2;this.Avail =avail;}}
【解决方案2】:

查看javadocsArrayList.set。它返回该位置的旧值。所以你会想做:

queueList.set(j, s);
newqueueList = queuelist;

【讨论】:

  • 是的,我也这样做了,但我仍然如何避免调用 List queueList =selection.initQueueCollection();进一步调用并获取 newqueueList?
【解决方案3】:

如果我对您的理解正确,那么您的问题是,在每个新输入中,您都在初始化一个新列表。也许只是将 queueList 作为类属性?

还有:

    newqueueList=queueList.set(j, s); 

我认为 set() 返回之前在该索引处的对象。所以你的 newqueueList 实际上会包含一个 QueueLoad 对象。

【讨论】:

    【解决方案4】:

    由于您还没有显示您的 main() 方法,我不确定它是什么样的,但按照这些思路应该可以工作:

    代替:

    QueueSelection selection = new QueueSelection();   
    List<QueueLoad> queueList =selection.initQueueCollection();  
    

    在方法外声明 queueList,如下所示:

    private static List<QueueLoad> queueList = null;
    

    那么,在方法中,

    if (queueList == null)
    {
      QueueSelection selection = new QueueSelection();   
      queueList =selection.initQueueCollection();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      相关资源
      最近更新 更多