-1

对数据库进行查询后,我得到如下结果

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

4 回答 4

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
                        );

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

于 2013-06-20T23:57:54.900 回答
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)));

番石榴或等待Java 8释放。

此链接可以帮助您过滤集合的最佳方法是什么

于 2013-06-21T00:00:51.627 回答
0

如果您无法将 sql 添加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]));
    }
}
于 2013-06-20T23:47:27.350 回答
0

为什么要过滤结果集?似乎有点不必要 为什么不在查询中添加“IncidentStatus == Closed”?

于 2013-06-20T23:45:18.190 回答