Проверьте ArrayList для экземпляра объекта - PullRequest
6 голосов
/ 15 июня 2011

У меня есть java-метод, который должен проверять ArrayList и проверять, содержит ли он экземпляр данного класса. Мне нужно передать метод тип класса для проверки в качестве параметра, и если список содержит объект данного типа, то вернуть его.

Это достижимо?

Ответы [ 4 ]

18 голосов
/ 15 июня 2011
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);
4 голосов
/ 15 июня 2011
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;
}
1 голос
/ 06 января 2016

Если вы используете 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, если вы никогда не использовали ее раньше. На самом деле это лучшая практика, чем , возвращающая ноль .

0 голосов
/ 15 июня 2011

Вы можете выполнять итерацию по своему списку и тестировать каждый элемент

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

Обратите внимание, что isInstance также захватывает подклассы.В противном случае см. Ответ Бела.

...