2017-01-18 6 views
0

ja Expressionでフィルタを作成する方法私が提供できるものがすべて式である場合、どのようにフィルタを提供するのですか?

私は地図をフィルタリングしたいのですが、私の生成したメタスキーマは私に式を提供することしかできません。

public final BooleanExpression contains(Expression<Integer> key, Expression<Address> value) 

私の質問は、どのように値の状態をフィルタリングする式を作成するのですか?

私は整数のためにExpressions.constant(55)を使うことができると思いますが、特定の郵便番号(zip)を持つすべてのアドレスのフィルタを表す式を作成する方法がわかりません。

+0

マップには何がありますか?正確な入力と期待される出力を得ることができませんでした。 –

+0

Map

+0

マップを最初にフィルタリングしてから、Expressions.constant(<フィルタリングされたマップからの腸>)を実行しませんでしたか? –

答えて

0

これは、最初にマップをフィルタリングしてから式を生成するのに役立ちます。

Map<Integer, Address> collect = <YOUR_MAP_REFERENCE>.entrySet().stream() 
           .filter(map -> map.getValue().getZipCode() == <ZIP_CODES_TO_BE_FILTERED>) 
           .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue())); 

Set<Integer> keys = collect.keySet(); 
ArrayList<Expression<Address>> list = new ArrayList<Expression<Address>>(); 

Iterator<Integer> it = keys.iterator(); 
while(it.hasNext()){ 
    list.add(Expressions.constant(collect.get(it.next()))); 
} 
//list: final list of Expression<Address> 
+0

それは良いアイデアですが、問題は250万行(だから> 250万のアドレス)です。 –

+0

私はquerydslと式についてあまり考えていませんが、述語式が役立つかどうかを確認してください。 –

関連する問題