如何从存储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
相关产品推荐
相关产品推荐

