浏览一系列List <object>列表</object>

时间:2013-11-27 16:43:25

标签: java list jaxb

如果您的对象具有List<Object> list,其元素本身可以引用也具有List<Object> list的对象,其元素本身可以引用也具有List<Object> list的对象,等等......你想在这个结构中找到特定类型的对象。

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

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

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

所有这些迭代和铸件都是一个巨大的混乱,看起来不那么聪明......

2 个答案:

答案 0 :(得分: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对象的列表。

答案 1 :(得分:0)

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