Java 中的 NSPredicate

问题描述 投票:0回答:1

对于 Android 应用程序,我想根据从用户输入传递的动态字符串扩展一些过滤功能。

我检查了 IOS 有一个名为 NSPredicate 的不错的框架,它可以在运行时评估字符串。 NSPredicate 能够访问内存中的对象(例如 NSDictionary 和其他类)来评估谓词。同样我没有找到Android对应的框架。

Java 语言或框架如何提供类似于 Objective-C 的 NSPredicate 的功能来查询和过滤集合或数据库中的数据?

例如,是否可以复制此方法在 JAVA 中的行为?

+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat 
                       argumentArray:(NSArray *)arguments;

我尝试搜索 groovy 评估,但似乎已被新 Android 项目弃用。 我认为创建一个自定义私有框架来解析字符串并评估它可以是一个解决方案(Custom Parser)。

我应该如何解决这个设计问题?

java android nspredicate
1个回答
0
投票

使用Java 8的Stream API有效地过滤集合。 使用lambda表达式动态定义过滤条件

List<Person> filteredList = persons.stream()
                                  .filter(person -> person.getName().startsWith(inputName))
                                  .collect(Collectors.toList());

使用类似于 SQL 的语法创建类型安全的查询。 允许复杂的过滤和连接

QPerson person = QPerson.person;
List<Person> filteredList = queryFactory.selectFrom(person)
                                          .where(person.name.startsWith(inputName))
                                          .fetch();

在运行时评估动态表达式。 可以访问对象属性和方法。

ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("name.startsWith('" + inputName + "')");
EvaluationContext context = new StandardEvaluationContext(person);
boolean matches = exp.getValue(context, Boolean.class);

为复杂的过滤逻辑或特定要求创建自定义解析器。 定义谓词表达式的语法并实现解析和评估逻辑。

如果数据存储在数据库中,则直接利用其查询功能。 使用准备好的语句或 ORM 框架进行安全高效的查询。

© www.soinside.com 2019 - 2024. All rights reserved.