【发布时间】:2016-11-20 03:41:23
【问题描述】:
我有一个抽象类“实体”和实现不同接口的对象(扩展“实体”)。 我还有一个包含所有这些不同对象的 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,因为它被认为是一种“设计气味”
标签: java arraylist filter sublist