java - 将数组列表值保存在函数中

标签 java arraylist

所以我试图获取样本数量,但每次我调用此函数时,可用样本列表都会因ArrayList<Sample> available = new ArrayList<Sample>(this.getSample());而重置因此,如果我调用另一个删除或添加样本的函数,然后调用此函数,它将始终是默认加上或减去大小。例如......如果 this.getSample()尺寸为 5,有 2 种土壤不可用。我调用了两次删除函数,但我的结果总是以 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,我无法在不弄乱该类或其他类中的其他函数的情况下调用该类的函数。

任何想法将不胜感激。

最佳答案

您正在循环 s,但只读取 b

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

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

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

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

关于java - 将数组列表值保存在函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28711290/

相关文章:

java - JPA 使用 Map<ID, Entity> 而不是 List<Entity>

Java 通过引用传递 boolean 列表

java - 尽管数字太大,但仍在处理中(忽略,我已修复)

java - ArrayList 获取数组索引

Java 需要一个分号,而显然有一个分号

用于解析干净 URL 并获取其不同组件的 Java 库/类

java - 如何在 GeoTools 中添加航点项目

java - 为 Java 应用程序设置 MaxDirectMemory 和 MaxHeapMemory

java - 基于一列数据对 ArrayList() 进行聚类的更简洁的方法是什么?

java - 使用抽象类的ArrayList