これを行うための標準的な方法があるはずですが、Stackoverflowを検索する試みは失敗しました。
私は次のような方法があります:
public void processSomeWidgetsForUser(int userItemId) {
Iterator<Widgets> iter = allWidgets.values().iterator();
while(iter.hasNext()) {
Widget thisWidget = iter.next();
if (userItemId == -1 || thisWidget.getUsersItemId() == userItemId) {
widget.process();
}
}
}
ご覧のとおり、-1はすべてを処理することを意味する「特別な値」です。これを行うことで、processSomeWidgetsForAllUsersと呼ばれる別のメソッドでループコードを繰り返す必要がなくなります。
しかし、私はこのような特別な値が誤用されたり誤解されたりしやすいので嫌いです。これはまさに私が今修正しなければならない状況です(誰かが-1が何か他のものを意味すると思った場合)。
これを改善する方法は2つしか考えられません。
- Widget.ALLWIDGETSのようなものと呼ばれる-1を含む定数があります。これは少なくとも自己文書化されていますが、コードによる-1の使用を停止しません(たとえば、誰かが古いコードを統合した場合)
- 処理するすべてのユーザーIDのリストを取得するようにメソッドを変更します。これは空の場合もありますが、パフォーマンス的にはそれほど優れていないようです(最初にすべてのユーザーIDを取得してから、削除をループする必要があります。また、番号がIDの取得と削除の間で、リスト内のウィジェットの数が変化します
もっと良い方法はありますか?明らかな何かが欠けていると確信しています。
上記のコードは少し変更されているため、コンパイルできない場合がありますが、要点を理解する必要があります。