You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从存储XML数据的ArrayList取元素?如何在新类中获取searchedProduct?

如何在Product类中获取XMLoader存储的searchedProduct值

首先,你的XMLoader类里的data列表是私有(private)的,外部类没法直接访问,所以第一步得给XMLoader加一个公共的获取方法,让其他类能拿到这个存储了SearchData对象的列表。

步骤1:改造XMLoader类,开放数据访问

1.1 添加获取data列表的公共方法

在XMLoader类中新增一个方法,用于对外暴露存储的SearchData列表:

// 返回存储SearchData的列表
public List<SearchData> getSearchDataList() {
    // 如果你不想外部修改原列表的内容,可以返回一个副本:new ArrayList<>(data)
    // 直接返回原列表则允许外部修改,根据你的业务需求选择
    return data;
}

1.2 将内部类SearchData改为静态

因为SearchData是XMLoader的非静态内部类,外部类(比如Product)直接使用时必须依赖XMLoader的实例,改成静态内部类会更方便外部调用:

// 修改为静态内部类
public static class SearchData {
    private String id;
    private String searchedProduct;

    public SearchData(String id, String searchedProduct) {
        this.searchedProduct = searchedProduct;
        this.id = id;
    }

    public String getSearchedProduct() {
        return searchedProduct;
    }

    public String getId() {
        return id;
    }

    @Override
    public String toString() {
        return "SearchData{" + "id='" + id + '\'' + ", searchedProduct='" + searchedProduct + '\'' + '}';
    }
}

步骤2:在Product类中获取searchedProduct

现在你可以在Product类里实例化XMLoader,拿到数据列表后,通过遍历或者ID匹配获取目标searchedProduct值,示例代码如下:

public class Product {
    public void loadSearchedProducts() {
        try {
            // 实例化XMLoader,注意处理构造函数抛出的异常
            XMLoader xmlLoader = new XMLoader();
            // 获取存储的SearchData列表
            List<XMLoader.SearchData> searchDataList = xmlLoader.getSearchDataList();

            // 场景1:遍历所有searchedProduct
            for (XMLoader.SearchData item : searchDataList) {
                String productName = item.getSearchedProduct();
                String productId = item.getId();
                // 这里可以根据业务需求处理数据,比如赋值给Product类的属性
                System.out.printf("ID: %s, 产品分类: %s%n", productId, productName);
            }

            // 场景2:根据ID查找特定的searchedProduct
            String targetId = "2"; // 假设你要找ID为2的条目
            for (XMLoader.SearchData item : searchDataList) {
                if (targetId.equals(item.getId())) {
                    String targetProduct = item.getSearchedProduct();
                    System.out.println("找到目标产品分类: " + targetProduct);
                    break;
                }
            }
        } catch (ParserConfigurationException | IOException | SAXException e) {
            // 处理XML加载失败的异常
            e.printStackTrace();
        }
    }
}

额外优化建议

如果你的XML数据量较大,或者需要频繁根据ID查找数据,可以在XMLoader里把列表转换成Map,提升查找效率:

// 在XMLoader类中新增Map属性
private Map<String, SearchData> dataMap = new HashMap<>();

// 在构造函数中同步填充Map
public XMLoader() throws ParserConfigurationException, IOException, SAXException {
    // 原有的XML解析逻辑不变...
    SearchData newData = new SearchData(id, searchedProduct);
    data.add(newData);
    dataMap.put(id, newData);
}

// 添加获取Map的方法
public Map<String, SearchData> getSearchDataMap() {
    return dataMap;
}

之后在Product类中查找时,直接用dataMap.get(targetId)就能快速拿到对应的SearchData对象,省去遍历的开销。

内容的提问来源于stack exchange,提问作者db9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:00:14