У меня есть абстрактный класс «сущность» и объекты (которые расширяют «сущность»), которые реализуют разные интерфейсы. У меня также есть ArrayList, который содержит все эти разные объекты.
Теперь, если мне нужен доступ ко всем сущностям, реализующим определенный интерфейс (для использования его методов), я использую следующий метод (который возвращает отфильтрованный список «сущностей», реализующих интерфейс «IDirectFire»):
public ArrayList<IDirectFire> getDirectFireSublist() {//direct fire sublist
ArrayList<IDirectFire> sublist = new ArrayList();
entities.stream().filter((it) -> (it instanceof IDirectFire)).forEach((it) -> {
sublist.add((IDirectFire) it);
});
return sublist;
}
Теперь к моему вопросу: следует ли мне дальше работать с этим методом или создать новый ArrayList, который существует помимо «сущностей» и который мне нужно будет вручную обновлять каждый раз при изменении «сущностей»?
Мне нужно много обновлять «сущности», поэтому я не уверен, что более эффективно хранить несколько подсписков и обновлять их каждый раз при изменении «сущностей» или мне следует продолжать использовать методы для фильтрации «сущностей» и применять методы к этим подсписки. Имейте в виду, что эти подсписки также будут использоваться в цикле в других методах, например:
private void resetFirestatusIDF() {//reset firestatus (IDirectFire)
getDirectFireSublist().stream().forEach((it) -> {
it.dfHasFired(false);
});}
Это жизнеспособно? Заранее спасибо!
instanceof
, где это возможно, так как это считается дизайнерским запахом. - person wakjah   schedule 17.07.2016