我目前在一个火车项目上工作,我有以下问题:
我将所有rolling stock保存在一个列表中:为了更好地理解我的类层次结构,下面是一个简化的继承概述:
RollingStock
Engine
SteamEngine
DieselEngine
...
Coach
FreightCoach
PassengerCoach
...
TrainSet
在我的登记簿里,我想把所有的机车车辆都保存在一个列表里 private List<RollingStock> rollingStock;
. 到目前为止,我已经为每种机车车辆类型(发动机、客车、列车组)创建了一个列表。然而,我需要删除一个特定的机车车辆,只有它的id,因此它更容易保存在一个列表中的一切。
在之前,我创建了这样一个引擎:
public void createEngine(Engine engine) {
this.engines.add(engine);
}
现在,只要一张单子,我就可以这样做:
public void createEngine(Engine engine) {
this.rollingStocks.add(engine);
}
这个很好用。对于returnengines()方法,我似乎没有找到解决方案:
就这么简单,每种机车车辆类型都有一个列表:
public List<Engine> returnEngines() {
return engines;
}
现在,我必须过滤机车车辆列表中的所有发动机:
public List<Engine> returnEngines() {
...
return rollingStock.???;
}
我可以添加方法 public String getType()
并检查其类型。
我无法想象没有更好的解决办法。
如何做到这一点?
2条答案
按热度按时间hvvq6cgz1#
流式处理列表,筛选
Engine
; 从Map示例RollingStock
至Engine
(使用cast),将结果收集到一个新的List
. 比如,nue99wik2#
elliott frisch的回答非常有效,这里有一个通用的解决方案,以防您还需要一个方法来过滤您的寄存器中的任何类型的层次结构:
然后可以由几个助手方法使用,例如。
或者可以直接调用。