返回对象数组List的子列表

时间:2013-06-20 23:39:23

标签: java

我在查询数据库

后得到如下结果
VendorName | IncidentID | IncidentStatus | IncidentDate
-------------------------------------------------------
XYZ        | 100        |     Open       | 02-JUN-2011    
ABC        | 101        |     Closed     | 03-JUN-2011  
MNP        | 102        |     Open       | 01-JUN-2011  
LPQ        | 103        |     Open       | 01-APR-2011 

我正在使用以下代码段

迭代列表
Iterator iter=resultList.iterator();
  while (iter.hasNext()) {
    Object[] result= (Object[]) iter.next();
    System.out.println("Vendor Name-->" +result[0]);
}

在迭代列表时,我想只返回Closed事件行。这该怎么做 ?

据我所知,可以通过定义一个新列表并逐个添加一个对象来实现,但是有更好的方法吗?

4 个答案:

答案 0 :(得分:0)

为什么要过滤结果集?这看起来有点不必要为什么不在你的查询中添加“IncidentStatus == Closed”?

答案 1 :(得分:0)

如果您无法将where IncidentStatus=closed添加到sql。

,请提供以下建议
//assume that Obj is one objet with the properties for this row
ArrayList<Obj> ret = new ArrayList<Obj>();
Iterator iter=resultList.iterator();
  while (iter.hasNext()) {
    Object[] result= (Object[]) iter.next();
    //check if the status is closed
    if(result[2].equals("Closed"){
         ret.add(new Obj(result[0],result[1],result[2],result[3]));
    }
}

答案 2 :(得分:0)

好吧,首先,如果它是可行的,在查询数据库时添加限制似乎更好,否则我建议你使用Apache Commons Collection FilterIterator

Predicate<Object[]> predicate = new Predicate<>() {
                   evaluate(Object[] obj) { 
                         return (obj[2].equals("Closed")); 
                   }
               };

Iterator<Object[]> filteredIterator = new FilterIterator<>(
                            resultList.iterator, 
                            predicate
                        );

这个aproach允许您创建一个通用的表谓词类,它可以帮助您使用任何字段和值过滤迭代器或集合。

答案 3 :(得分:0)

假设您使用的是java 1.7

if(resultList == null)
  return;

List<MyClass> toReturn = new ArrayList<>(resultList.size());

for(MyClass element : resultList){
  if (element.isClosedState()){
    toReturn.add(element);
  }
}

您可以使用外部API。

lambdaj允许过滤集合而无需编写循环或内部类,如下例所示:

List<MyClass> elements = select(element, having(on(MyClass.class).getProperty(),
    greaterThan(someValue)));

guava或等待Java 8发布。

此链接可以帮助您what is the best wat to filter a collection