Java 浏览一系列列表<;对象>;列表

Java 浏览一系列列表<;对象>;列表,java,list,jaxb,Java,List,Jaxb,如果您有一个对象具有列表,其元素本身可以引用也具有列表的对象,其元素本身可以引用也具有列表的对象,以此类推……并且您希望访问此结构中特定类型的对象 实现这一目标的最佳方式是什么 我当前的方法是迭代第一个列表,要求每个元素obj.getClass()==XYZ.class,如果是,则获取元素,将其强制转换,获取其列表,然后像前面一样继续 我被绑定到这些列表中,因为这些类是从XSD模式生成的JAXB 所有这些迭代和铸件都是一团乱麻,看起来不那么聪明…我认为您可以使用这种递归函数: public Li

如果您有一个对象具有
列表
,其元素本身可以引用也具有
列表
的对象,其元素本身可以引用也具有
列表
的对象,以此类推……并且您希望访问此结构中特定类型的对象

实现这一目标的最佳方式是什么

我当前的方法是迭代第一个列表,要求每个元素
obj.getClass()==XYZ.class
,如果是,则获取元素,将其强制转换,获取其
列表
,然后像前面一样继续

我被绑定到这些列表中,因为这些类是从XSD模式生成的JAXB


所有这些迭代和铸件都是一团乱麻,看起来不那么聪明…

我认为您可以使用这种递归函数:

public List<Test> getTestElements(List<Object> list) {
    List<Test> result = new ArrayList<Test>();
    for (Object o : list) {
        if (o instanceof Test) {
            result.add((Test) o);
        } else if (o instanceof List) {
            result.addAll(getTestElements((List<Object>) o));
        }
    }
    return result;
}
公共列表获取元素(列表){
列表结果=新建ArrayList();
用于(对象o:列表){
if(o instanceof Test){
结果。添加((测试)o);
}else if(o instanceof List){
addAll(getTestElements((List)o));
}
}
返回结果;
}
它将返回输入列表中存在的所有测试对象的列表

  • 您不应该使用递归函数。它可能导致堆栈溢出异常
  • 认为您的数据结构像一棵树(有节点和子节点)。使用BFS(宽度优先搜索)遍历树,查找并保留匹配的对象
  • BFS:
  • 使用Java队列实现BFS

  • 我相信你可以重构你的结构,这样JAXB就可以创建POJO实例而不是
    List
    对象。创建一个递归函数来遍历这个结构。@SotiriosDelimanolis抱歉,我不太明白。“重构你的结构”是指我的XSD?恐怕这是不可能的,因为还有其他应用程序(第三方web服务)已经使用了这些Exact XSD,我的应用程序应该支持与现有应用程序相同的数据结构。XSD不是我做的,我对它们没有正确的认识。