4

lambdaj でネストされた配列からオブジェクトを抽出したい。私のモデルは、「 Elements」の配列を所有する「 Products 」のリストです。

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 でネストされた配列を反復処理する方法はありますか?

4

1 に答える 1

0

わかりました私は解決策を見つけました:

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

これにより、最初に一意のコレクション内のすべての要素が選択およびフラット化され、次にコード プロパティでフィルター処理されます。

パフォーマンスの観点からは、これが最善の解決策であるかどうかはわかりません。フル スキャンが完了する前に、すべての製品と要素が平坦化されているように見えます。(ラムダジについての私の理解は、ここでは弱すぎて確信が持てません)

最初のコードが一致すると停止するため、完全な Java 実装の方が効率的だと思います。

于 2012-12-12T11:00:34.610 に答える