查找ArrayList中的对象是否具有特定字段

时间:2015-01-27 17:08:55

标签: java arraylist

我试图找出ArrayList中的Object是否具有特定值的特定字段。我想这样做,只是使用ArrayList而不是N个单独的对象:

SomeObject o1 = new SomeObject();
SomeObject o2 = new SomeObject();
...
SomeObject oN = new SomeObject();


boolean running = true;
while (running)
{
    //Do stuff
    running = o1.booleanField || o2.booleanField || ... || oN.booleanField;
}

我认为可以通过for-each循环完成,但我不确定如何。如果我说的话有任何意义,请回复。

3 个答案:

答案 0 :(得分:0)

假设有一个单线程场景,你应该:

  • 使用对象的类别参数化ArrayList的类型,而不是使用Object
  • 不要使用while循环,而是使用ArrayList<YourObject>或增强型for循环迭代for,并在任一元素具有所需的值时中断boolean属性,通过调用其getter
  • 这并没有针对任何衡量标准进行优化,它会一直迭代直到找到某些内容或者如果没有找到任何内容就结束迭代

主要课程中的一些草案代码:

public static void main(String... args) {
    List<Foo> foos = new ArrayList<Foo>();
    // TODO populate with various foos
    for (Foo foo: foos) {
        if (foo.hasFoo()) {
            // TODO something
            break;
        }
    }
}
static class Foo {
    boolean foo;
    public Foo(boolean value) {
        foo = value;
    }
    public boolean hasFoo() {
        return foo;
    }
}

答案 1 :(得分:0)

反思是您的答案。

而不是 while循环我更喜欢 Iterator 界面, 遍历List并为每个对象尝试:

while(itr.hasNext()){
    Object someObject = itr.next();
    for (Field field : someObject.getClass().getDeclaredFields()) {
        field.setAccessible(true); // You might want to set modifier to public first.
        Object value = field.get(someObject); 
        if (value != null) {
            System.out.println(field.getName() + "=" + value);
        }
    }
}

答案 2 :(得分:0)

当你说Object o1 = new Object();时,你不是在谈论java.lang.Object,对吧?由于java.lang.Object的字段是在javadoc中定义的,您不能要求某种booleanfield,因此它不会存在。

如果ArrayList包含多种对象,则可以使用instanceof.getClass()来了解类对象所属的对象。

ArrayList<Object> objs = .... 
for (Object obj : objs) { 
     if (obj instanceof MyObject1) {
           MyObject1 myObject1 = (MyObject1) obj;
          // check for boolean field using its getter
     }
     else if (obj instanceof MyObject2) { 
           MyObject2 myObject2 = (MyObject2) obj;
          // check for boolean field using its getter
     }  
     ....
}

如果ArrayList只包含一种对象,请查看@Mena的答案。