当一个对象有多个内部集合时,我如何从外部迭代它们?

时间:2012-08-30 18:12:39

标签: java oop collections

不久之前,我为导航图编写了一个编辑器,代表了建筑物内部(和之间)的路径。它存储在Graph-class中。

例如,每个楼层的边缘存储在一个集合中,另外还有一个集合用于楼层之间的集合。

绘制它们(只有当前楼层)或将它们保存到磁盘(所有这些),我需要从外面获取它们。为此我实现了callWithAllEdges和callWithAllEdgesIn等方法,后者使用参数来指定一个楼层。

这些方法采用了一个仿函数(至少我称之为),然后用边缘调用。

这就是绘制一层楼边缘的样子:

graph.callWithAllEdgesIn(id, new Functor<Edge>() {
    public void call(Edge e) {
        drawEdge(g,e);
    }
});
当然,这有点啰嗦。可能是java的问题而不是我的解决方案,我不知道。

另一种方法是创建一个方法,将所有需要的边的引用放入一个新的集合,然后迭代,我想。虽然对我来说似乎有点不对。

我的问题是:我怎么能更好地解决这个问题?

1 个答案:

答案 0 :(得分:1)

您目前的设计非常合理。另一种选择是提供Iterable / Iterator。这样您就不需要将所有内容复制到新列表中,而是可以懒洋洋地单步执行内部列表。