2017-11-10 2 views
0

querydslを使用すると、さまざまなwhen/then文と最終的なelse式でcase文を生成する必要があります。Querydsl:さまざまな時/時のペアでcase文を作成する

としては、hereを説明、私は簡単this-

Expression<String> cases = customer.annualSpending 
    .when(10000).then("Premier") 
    .when(5000).then("Gold") 
    .when(2000).then("Silver") 
    .otherwise("Bronze"); 

この様/ then文は、私はすでにないsuccess-

と試みたアプローチであるときの固定数でcase文を生成することができました私はいくつかのタイプの問題に遭遇した
Map<BooleanBuilder,SimplePath<?>> caseExpressionMap = new LinkedHashMap<>();  
CaseBuilder.Cases<?,?> caseExpression = null; 
for(BooleanBuilder expression : caseExpressionMap.keySet()){ 
    if(caseExpression!=null) 
    caseExpression = caseExpression.when(expression).then(caseExpressionMap.get(expression)); 
else 
    caseExpression = new CaseBuilder().when(expression).then(caseExpressionMap.get(expression)); 
} 
cases=cases.otherwise(...) 

- その後、

方法を(#19-のをキャプチャします?)タイプで CaseBuilder.CaseWhenは

はここにいくつかの助けに感謝の引数(SimplePath)には適用されません です。

答えて

0

CaseBuilderのジェネリックを変更すると、そのジョブが実行されました。このコードは動作します。

Map<BooleanBuilder,String> caseExpressionMap = new LinkedHashMap<>(); 
CaseBuilder.Cases<String,SimpleExpression<String>> cases = null; 
for(BooleanBuilder expression : caseExpressionMap.keySet()){ 
    if(caseExpression!=null) 
    caseExpression = caseExpression.when(expression).then(caseExpressionMap.get(expression)); 
else 
    caseExpression = new CaseBuilder().when(expression).then(caseExpressionMap.get(expression)); 
} 
cases=cases.otherwise(...) 
関連する問題