2012-12-12 38 views
4

我想從使用lambdaj的嵌套數組中提取對象。 我的模型是自己的「元素」的陣列「產品」的名單:使用lambdaj從嵌套數組中提取對象

public class Product { 
    Element[] elements; 
} 
public class Element { 
    String code; 
} 

某處在我的代碼我有產品的清單,我想找到一個一元我的列表中有特定的代碼。

根據這一討論:https://groups.google.com/forum/?fromgroups=#!topic/lambdaj/QQGmY3cVHP8,我可以使用:

select(myproductList, 
     having(on(Product.class).getElements() 
       .contains(selectUnique(elements, 
        having(on(Element.class).getCode(), equalTo("codeToFind")))); 

但不幸的是,這不會編譯,因爲getElements()是一個數組,而不是一個集合......

所以我結束了此java代碼:

for (Product p : products) { 
    for (Element e : p.getElements()) { 
     if (e.getCode().equals("codeTofind")) { 
      return e; 
     } 
    } 
} 
return null; 

有沒有辦法通過嵌套數組迭代lambdaJ?

回答

0

好,我找到了一個解決方案:

selectFirst(flatten(extract(products, on(Product.class).getElements())), 
          having(on(Element.class).getCode(), equalTo("mycode"))); 

這將首先選擇和打平我在一個獨特的集合中的所有元素,然後過濾它的代碼屬性。

從性能的角度來看,我不確定它是最好的解決方案:它看起來好像在全面掃描完成之前所有的產品和元素都變平了。 (我對Lambdaj的理解太弱了,無法確定)

我認爲完整的java實現更高效,因爲它在匹配第一個代碼時停止。