2013-06-20 30 views
-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事件行。這個怎麼做 ?

我明白,它可以通過定義一個新的列表並添加一個接一個的對象來完成,但是有沒有更好的方法?

+0

你不得到從DB一個'ResultSet'對象? – JHS

+2

我會在我的數據庫查詢中的where子句中添加「唯一已關閉」條件,因此您不必親自過濾它。 – rgettman

+0

@rgettman我需要得到所有的數據,並且在某些情況下,我需要有這個邏輯。 – Pankaj

回答

0

爲什麼要篩選結果集?這似乎有點不必要爲什麼不只是添加「IncidentStatus ==關閉」到您的查詢?

+0

我需要得到所有的數據,並在某些情況下,我需要有這個邏輯 – Pankaj

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

這種形式給出允許您創建一個通用的表謂詞類可以幫助你使用任何字段和值來過濾迭代器或集合。

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