Querydsl:构建具有不同数量 when/then 对的 case 语句

Querydsl : build case statement with varying number of when/then pairs

使用 querydsl,我遇到了一个问题,我需要生成一个包含不同数量 when/then 语句和最终 else 表达式的 case 语句。

here 所述,我已经能够像这样轻松地生成具有固定数量 when/then 语句的 case 语句-

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

这是我已经尝试过但没有成功的方法-

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(...)

我 运行 遇到了一些类型问题 -

The method then(capture#19-of ?) in the type CaseBuilder.CaseWhen is not applicable for the arguments (SimplePath)

在此感谢您的帮助。

更改 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(...)