在arraylist中查找特定对象

时间:2018-04-13 13:32:06

标签: java arraylist interface

目前在arraylist中获取特定对象时遇到问题。所以我有多个实现相同接口的类,我创建了不同类的对象。问题是我不知道如何区分arraylist中的类。

ArrayList<Interface> arraylist = new ArrayList<>();

public static void main(String[] args) {

    addInterface(new interfaceA());
    addInterface(new interfaceB());
    addInterface(new interfaceC());

}

public static void addInterface(Interface foo) {
    arraylist.add(foo);
}

假设我想获得interfaceA(),我可以通过arraylist.get(0)来调用它,但我不想对其进行硬编码。每个类都有相同的方法,但代码不同。

3 个答案:

答案 0 :(得分:2)

您可以通过检查运行时类来使用谓词进行过滤:

List<Interface> interfaceAList = arraylist.stream()
                         .filter(e -> InterfaceA.class.isInstance(e))
                         .collect(Collectors.toList());

答案 1 :(得分:2)

我会使用Map代替List。在这种情况下,IdentityHashMap非常适合。

interface Thing {

}

IdentityHashMap<Class<? extends Thing>, Thing> things = new IdentityHashMap<>();

class ThingA implements Thing {
    @Override
    public String toString() {
        return "ThingA{}";
    }
}

class ThingB implements Thing {
    @Override
    public String toString() {
        return "ThingB{}";
    }
}

class ThingC implements Thing {
    @Override
    public String toString() {
        return "ThingC{}";
    }
}

public void registerThing(Thing thing) {
    things.put(thing.getClass(), thing);
}

public void test(String[] args) {
    registerThing(new ThingA());
    registerThing(new ThingB());
    registerThing(new ThingC());

    System.out.println(things.get(ThingB.class));
}

答案 2 :(得分:0)

    public Interface getInterfaceA(List<Interface> interfaces) {
    for (Interface i : interfaces) {
        if (i instanceof InterfaceA)
            return i;
    }
    return null;
    }