开发者

Check ArrayList for instance of object

开发者 https://www.devze.com 2023-03-12 18:45 出处:网络
I have a java method that should check through an ArrayList and check if it contains an instance of a given class. I need to pass开发者_Python百科 the method the type of class to check for as a parame

I have a java method that should check through an ArrayList and check if it contains an instance of a given class. I need to pass开发者_Python百科 the method the type of class to check for as a parameter, and if the List contains an object of the given type, then return it.

Is this achievable?


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;    
}

and call

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


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;
}


If you're using Java 8 you can do:

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

Check the documentation of Optional if you never used it before. Actually this is better practice than returning null.


You can iterator over your list and test each element

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

Note that isInstance also captures subclasses. Otherwise see Bela`s answer.


check one of the the item instance in the list

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;
                        }
                    }
0

精彩评论

暂无评论...
验证码 换一张
取 消