我有一个队列列表如下:
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()
;
它始终是旧的列表,而不是更新的列表。
请帮忙。
答案 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();
}