检查ArrayList以获取对象的实例

时间:2011-06-14 21:05:59

标签: java arraylist instanceof

我有一个java方法应该检查ArrayList并检查它是否包含给定类的实例。我需要传递方法类型的类来检查作为参数,如果List包含给定类型的对象,则返回它。

这可以实现吗?

5 个答案:

答案 0 :(得分:18)

public static <T> T find(Collection<?> arrayList, Class<T> clazz)
{
    for(Object o : arrayList)
    {
        if (o != null && o.getClass() == clazz)
        {
            return clazz.cast(o);
        }
    }

    return null;    
}

并致电

String match = find(myArrayList, String.class);

答案 1 :(得分:4)

public static <T> T getFirstElementOfTypeIn( List<?> list, Class<T> clazz )
{
  for ( Object o : list )
  {
    if ( clazz.isAssignableFrom( o.getClass() ) )
    {
      return clazz.cast( o );
    }
  }
  return null;
}

答案 2 :(得分:1)

如果你使用的是Java 8,你可以这样做:

public <T> Optional<T> getInstanceOf(Class<T> clazz, Collection<?> collection) {
    return (Optional<T>) collection.stream()
            .filter(e -> clazz.isInstance(e.getClass()))
            .findFirst();
}

如果您之前从未使用过,请查看Optional的文档。实际上这比returning null更好。

答案 3 :(得分:0)

您可以对列表进行迭代并测试每个元素

Class<?> zz = String.class;
for (Object obj : list) {
    if (zz.isInstance(obj)) {
        System.out.println("Yes it is a string");
    }
}

请注意isInstance也会捕获子类。否则请看Bela的回答。

答案 4 :(得分:0)

检查列表中的项目实例之一

if (object instanceof ArrayList<?>) {
                        if (((ArrayList<?>) object).get(0) instanceof ClassA) {
                            classAList= (ArrayList<ClassA>) object;
                        } else if (((ArrayList<?>) object).get(0) instanceof ClassB) {
                            classBList= (ArrayList<classB>) object;
                        } else if (((ArrayList<?>) object).get(0) instanceof ClassC) {
                            classCList= (ArrayList<ClassC>) object;
                        }
                    }