当我能提供的只是一个表达式时,如何提供过滤器

时间:2017-01-18 08:22:41

标签: java querydsl

如何使用en Expression创建过滤器。

我想过滤地图,而我生成的元模式只允许我提供表达式。

String genre = genreFromXml.text();

我的问题是如何创建一个过滤价值状态的表达式?

我想我可以使用public final BooleanExpression contains(Expression<Integer> key, Expression<Address> value) 作为整数,但我不知道如何构建一个表达式,表示所有具有特定邮政(zip)代码的地址的过滤器。

1 个答案:

答案 0 :(得分: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>