如何在main方法中获取更新列表

时间:2013-11-19 17:17:26

标签: java list

我有一个队列列表如下:

public class QueueSelection {   
    public List 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);   
        List list = new ArrayList();   
        list.add(d1);   
        list.add(d2);   
        list.add(d3);   
        list.add(d4);   

        return list;   
     }  

现在从main方法中,我调用上面的方法,如

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

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

for (QueueLoad s:queueList)   
{   
    if(s.getStatus()==false)   
    {   
        str1=s.getQueueName1();   
        str2=s.getQueueName2();   
        str3=s.getStatus();   
        particularCollection=s;   
        System.out.println(s);   
        particularCollection.setStatus(true);   
        particularCollection.setQueueName1(str1);   
        particularCollection.setQueueName2(str2);   
        int j=queueList.indexOf(particularCollection);   
        System.out.println("The index is"+j);   
        s = new QueueLoad(str1, str2, true);   
        newqueueList=queueList.set(j, s); 

列表已更新。现在当第二个输入到来时,因为在第一行中它看到了List<QueueLoad> queueList =selection.initQueueCollection(); 它始终是旧的列表,而不是更新的列表。

请帮忙。

4 个答案:

答案 0 :(得分:0)

  

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

我认为这意味着您不希望再次调用init方法'当第二个输入时'。

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

答案 1 :(得分:0)

查看ArrayList.set的{​​{3}}。它返回该位置的旧值。所以你想做:

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

答案 2 :(得分:0)

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

另外:

    newqueueList=queueList.set(j, s); 

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

答案 3 :(得分:0)

由于你没有展示你的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();
}