2017-01-18 16 views
0

Как создать фильтр с помощью en Expression.Как я могу предоставить фильтр, когда все, что я могу предоставить, является выражением

Я хочу фильтровать карту, и моя сгенерированная мета-схема позволяет мне предоставлять выражение.

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

Мой вопрос в том, как создать выражение, которое фильтрует состояние ценности?

Я думаю, что могу использовать Expressions.constant(55) для целого числа, но я не уверен, как построить выражение, которое говорит фильтры для всех адресов, которые имеют определенный почтовый (почтовый) код.

+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

Это хорошая идея, но проблема в том, что у меня 2,5 миллиона строк (So> 2,5 миллиона адресов) –

+0

У меня нет большой идеи о querydsl и выражении, но проверьте, поддерживает ли предикат. –

 Смежные вопросы

  • Нет связанных вопросов^_^