Check ArrayList for instance of object

前端 未结 5 1302
南方客
南方客 2021-01-02 11:57

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

相关标签:
5条回答
  • 2021-01-02 12:25
    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;
    }
    
    0 讨论(0)
  • 2021-01-02 12:34
    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);
    
    0 讨论(0)
  • 2021-01-02 12:34

    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 讨论(0)
  • 2021-01-02 12:48

    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.

    0 讨论(0)
  • 2021-01-02 12:48

    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.

    0 讨论(0)
提交回复
热议问题