0

少し前に、建物の内部(および建物の間)のパスを表すナビゲーショングラフのエディターを作成しました。Graphクラス内に格納されていました。

たとえば、エッジはフロアごとに1つのコレクションに保存され、さらにフロア間にあるコレクションには1つのコレクションが保存されました。

それらを描画する(現在のフロアのみ)か、ディスクに保存する(すべて)には、外部からそれらを取得する必要がありました。そのために、callWithAllEdgesやcallWithAllEdgesInなどのメソッドを実装しました。後者は、フロアを指定するためのパラメーターを取ります。

それらのメソッドはファンクターを取り(少なくとも私はそれをそれと呼んだ)、それは次にエッジで呼び出された。

これは、1つのフロアのエッジの描画がどのように見えるかです。

graph.callWithAllEdgesIn(id, new Functor<Edge>() {
    public void call(Edge e) {
        drawEdge(g,e);
    }
});

もちろん、これは少し時間がかかります。私の解決策ではなく、Javaの問題かもしれませんが、私にはわかりません。

別の方法は、必要なすべてのエッジへの参照を新しいコレクションに入れて、それを反復処理するメソッドを作成することだったと思います。しかし、私にはちょっと間違っているように見えました。

私の質問は:どうすればそれをもっとうまく解決できたでしょうか?

4

1 に答える 1

1

あなたの現在の設計は完全に合理的です。もう 1 つのオプションは、Iterable/Iterator を提供することです。そうすれば、すべてを新しいリストにコピーする必要はありませんが、代わりに内部リストを遅延してステップ実行できます。

于 2012-08-30T19:55:32.957 に答える