过滤List的最佳方法是哪种?

时间:2011-11-23 09:18:27

标签: java collections

假设我有这种简单的类结构:

Vehicle
|-- Bus
`-- Car

Bus and Car extends Vehicle

我有List<Vehicle>。我怎样才能获得公共汽车或汽车?我想避免使用instanceof运营商。我是否必须使用访客模式或是否有更简单的解决方案?

3 个答案:

答案 0 :(得分:3)

我认为没有办法避免在你的情况下使用instanceof运算符,也没有办法生成比这更简单的代码(没有Guava的帮助):

List<Bus> buses = new ArrayList<Bus>();
for (Vehicle v : vehicles)
    if (v instanceof Bus)
        buses.add(v);

答案 1 :(得分:3)

某些内容需要使用instanceof或等效内容(例如Class.isInstance)。

Guava有一种方法可以做到这一点:Iterables.filter。所以你可以使用:

List<Bus> buses = Lists.newArrayList(Iterables.filter(vehicles, Bus.class));

答案 2 :(得分:-2)

如果您不希望instanceOf将字段添加到确定类的Vehicle。