项目已正确添加和打印,但 ArrayList 大小显示为 0,这是为什么?

问题描述 投票:0回答:1
public ArrayList<AbstractStock> listBySymbol(String symbol) {
    int i = 0;
    while (i < stockData.size()) {
        if (stockData.get(i).toString().contains(symbol)) {
            listBySymbol.add(stockData.get(i));
            System.out.println(listBySymbol.get(i).toString());
        }
        i++;
    }
    return listBySymbol;
}

size = 0 error

我尝试了上面的方法,首先我把它放在一个for循环中并替换了一段时间,希望能出现奇迹,我尝试过使用变量来存储数据,然后将其添加到ArrayList中,将其从if 语句和使用多个循环,但似乎没有任何作用。

java arraylist
1个回答
0
投票

假设

stockData
是包含所有股票的列表,并且您只想过滤它以创建子列表,也许问题出在我们看不到的代码部分,也许
listBySymbol
列表是一个字段并且已被在其他地方进行操作,可能会使用不同的参数调用另一次
listBySymbol
,从而导致空字符串。

我的第一个建议是使用并返回一个局部变量,也许使用未修改的变量,就像这样

public List<AbstractStock> listBySymbol(String symbol) {
    List<AbstractStock> listBySymbol = new ArrayList<>();
    int i = 0;
    while (i < stockData.size()) {
        if (stockData.get(i).toString().contains(symbol)) {
            listBySymbol.add(stockData.get(i));
            System.out.println(listBySymbol.get(i).toString());
        }
        i++;
    }
    return Collections.unmodifiableList(listBySymbol);
}

通过这种方式,即使没有

Collections.unmodifiableList(listBySymbol)
,你也非常确定没有人可以在幕后操作你的 listBySymbol 结果,如果你想优雅地做到这一点,请使用这个:

public List<AbstractStock> listBySymbol2(String symbol) {
    return stockData.stream() // Use stream (java 8)
            .filter(stock -> stock.toString().contains(symbol)) // filter stock per symbol
            .toList(); // collect result of filter to list
}
© www.soinside.com 2019 - 2024. All rights reserved.