2013-11-27 25 views
1

如果您有具有List<Object> list其元素本身可以指的是也有List<Object> list,它的元素本身可以指的是也有List<Object> list等物体对象的对象。 ..你想在这个结构中找到一个特定类型的对象。获得通过一系列的列表<Object>名单

达到此目的的最佳方法是什么?

我目前的做法是迭代遍历第一个列表,询问每个元素obj.getClass() == XYZ.class,如果是的话,接受元素,投射它,得到它的List<Object> list并继续像以前一样。

我被绑定到这些列表,因为这些类是从XSD架构生成的JAXB。

所有这些迭代和铸件是一个巨大的混乱,并期待不高明...

+4

我相信你可以重构你的结构,以便JAXB创建POJO实例而不是List对象。 –

+0

创建一个递归函数来结构化。 – sjkm

+0

@SotiriosDelimanolis对不起,我不确定我理解。用'重构你的结构'你的意思是我的XSD?恐怕这是不可能的,因为还有其他应用程序(第三方Web服务)已经使用这些excact XSD,并且我的应用程序应该支持与那些现有应用程序相同的数据结构。 XSD不是由我制作的,我没有对它们进行适当的了解。 – dave

回答

0

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

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; 
} 

这将返回列表所有出现在输入列表中的Test对象。

0
  1. 你不应该使用递归函数。它可能会导致Stackoverflow异常
  2. 认为你的数据结构就像一棵树(有节点和子节点)。使用BFS(广度优先搜索)遍历树并找到并保留匹配的对象。
  3. BFS:http://en.wikipedia.org/wiki/Breadth-first_search
  4. 使用Java队列实现BFS。