Calendarを拡張するMonthというクラスを作成しました。これは、指定した月のイベントを保持するために使用しています。私はTreeSetに格納された月オブジェクトの数年分を持っています。私が記録したいイベントのほとんどは、数ヶ月間続けられ、開始月(および期間、月)によってのみ指定されます。私はこれを行うことができます:「自分の場所を失うことなく」イテレータ以外のJavaコレクションの要素にアクセスするにはどうすればよいですか?
for (Event e : events)
{
for (Month aMonth : myMonths)
{
// check if this is a start month for e
// if it is, call aMonth.addEvent(e);
// and also add e to the next e.getDuration() months of myMonths
// and then start checking again from the month where we called addEvent(e)
// in case there is another occurrence of e starting
// before the first one has finished
}
}
私は問題を抱えています。 foreachループの代わりにイテレータを使用してみましたが、イテレータを使用して次のx月にeを追加する開始日が見つかったときに別のループが発生しましたが、イテレータを開始位置に戻すことができませんでした。 ListIteratorにはprevious()メソッドがあるようですが、重複を避けるためにListではなくSortedSetを使用したいと考えています(おそらくこの傾きは間違っています)。
これははるかに簡単ですプレーンな古い配列でこれを行いますが、コレクションはプログラムの他の部分にも役立ちます。 おそらく私は複数のイテレーターを使用して、私の主要な "ブックマーク"イテレーターのすぐ後ろの数ヶ月間に、これらの接待のために必要に応じて "使用する"ことができますか?しかし、まさにエレガントに見えません。 イテレータが実際に指し示しているところを超えて "覗く"ためのハックがありますか?
私はこれには全く新しいので、設計上の誤りがあるかもしれません。すべてのアドバイスが歓迎されました!
ありがとうStriplingWarrior - 詳細な返信に感謝します。私はまだそれについて手を振っていますが、あなたの提案は確かに私に考えのための食糧を与えました! – pocketdora