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 the method the type of class to check for a
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;
}
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);
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;
}
}
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.