在函数中保存arraylist值

时间:2015-02-25 04:43:35

标签: java arraylist

所以我试图获取样本数量,但每次调用此函数时,由于ArrayList<Sample> available = new ArrayList<Sample>(this.getSample());,可用的样本列表重置。因此,如果我调用另一个删除或添加样本的函数,则调用此函数它将始终是默认加上或减去大小。例如......如果this.getSample()大小为5且有2个土壤不可用。我调用了remove函数两次,但我的结果总是以4结束,它应该是3。

public ArrayList<Sample> getAvailableSample() {
    ArrayList<Sample> available = new ArrayList<Sample>(this.getSample());  
 //create a copy of arraylist from sample. (doesn't mess with original data)
        for(Sample s : available) {  //loop through list
            if(s.getSoil()!=null){ //soil is not available
            available.remove(s);   //remove from list
            }
        }

        //System.out.println("size of available: "+available.size());
        return available; //returns number of available samples
    }

我无法将ArrayList<Sample> available = new ArrayList<Sample>(this.getSample());移到外面,因为ArrayList<Sample>(this.getSample());默认为null,我不能在不弄乱此类或其他类中的其他函数的情况下调用此类的函数。

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

您正在s上循环,但只能阅读b

for(Sample s : available) {
    if(s.getSoil()!=null) {     // s, not b.
        available.remove(s);   // s, not b.
    }
}

您可以像Sample中的每个available一样阅读循环。

创建一个Collection c,然后在循环后将其删除。

List<Sample> c = new ArrayList<>();
for(Sample s : available) {
    if(s.getSoil()!=null) {
        c.add(s);
    }
}
available.removeAll(c);

答案 1 :(得分:0)

m thinking that the problem is that you can删除正在进行交互的列表中的对象。

你能尝试如下吗?而是删除没有可用土壤的样本,您可以创建一个仅包含具有土壤的对象的新列表。

public ArrayList<Sample> getAvailableSample() {
    ArrayList<Sample> available = new ArrayList<Sample>();  
    for(Sample s : this.getSample()) {  //loop through list
        if(s.getSoil()==null){ //soil is available
          available.add(s);   //add into the available list
        }
    }
    //System.out.println("size of available: "+available.size());
    return available; //returns number of available samples
}