異なるオブジェクトの階層にわたって単一ループ反復を実装するにはどうすればよいですか? Javaの階層を超える単一反復8
は(私はforループを使用しているが、これらは、グリッドの異なる領域を表している - 。私はやっと大幅に物事を単純化する単一のループを使用した位置決めのために使用されるすべての値を追跡することができます。)
これをオブジェクトの階層は、編集
class Hierarchical < PT extends Hierarchical<?,?,?>,T,CT extends Hierarchical< ?, ?, ? >>{
ObservableList<Hierarchical> children; //Zero or more objects..
}
class Seed extends Hierarchical { /* never has children-objects */ }
class Tree extends Hierarchical { ... }
class Planet extends Hierarchical { ... }
....私が持っているものです:惑星のインスタンスの子どもたちは木、種子を含む樹木も同じです。
...そしてこれは私が何をしたいです:
Planet p = new Planet(); //trees/seeds are instantiated internally.
Iterator<?> itr = p.getChildren().iterator();
while (itr.hasNext()) {
Object obj = itr.next();
if (obj instanceof Planet){ /* cast to Planet & do stuff */ }
if (obj instanceof Tree ){ /* cast to Tree & do stuff */ }
if (obj instanceof Seed ){ /* cast to Seed & do stuff */ }
}
は明らかに答えはIterator<?> itr = p.getChildren().iterator();
であるが、どのようにそれを実装することができますか?階層のどのレベルでも、子供たちが子どもたちの間を巡回するような場合には、その階層のすべてのレベルで子供の位置を保持する必要があるようです。それはずっと長く、私はもうデザインパターン& javaのコレクションに精通していない。 :(私は、pがタイプ惑星であるためIterator<Hierarchical> itr = p.getChildren().iterator();
を使用しようとすると、私はエラーが発生したことに注意しましょう
編集:。これは、「深・ラスト」(...またはFIFOにする必要があります
https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/TreeTraverser.html –
ですから、全体のサブ階層を横断イテレータをしたいです特定のノードの?最初に深みを持たせたい、あるいは息をするようにしたいですか? – Andreas
ありがとうAndreas。私はそれが「最初の」または「最後の」とは思わないが、代わりに「遭遇した」ものである。私はRamsayがすでに再帰を使ってまともな答えを投稿したと思う。私は結果に満足しているとは言いませんが、うまくいくはずです。 –