我不确定这是否可行,经过大量的研究,我最终来到这里寻求你的帮助甚至指导。假设我有一个json数组,数组中有10种不同类型的对象。这是一个json,通过运动游戏的api检索。我需要做的是在我的应用程序中过滤这些对象。我正在使用java,到目前为止,我将使用流过滤器和 predicate 。我知道我可以创建不同类型的 predicate 并将它们放在stream.filter()函数中,但是是否可以动态地这样做呢?
例如,我需要按时间过滤这个数组。这个 predicate 将是 return p -> p.getTime() > 1;
然后: return match.stream().filter( predicate ).collect(Collectors.<Match>toList());
如果另一个过滤器有另一个条件,即团队名称,该怎么办。是否可以在另一个 predicate 中添加一些how,并在这两个 predicate 之间添加“and”“or”条件?我需要使用一个带有不同 predicate 的过滤器函数动态地完成这项工作。
有没有一种方法可以像定制查询一样将其存储在数据库中并检索它,然后像 predicate 一样使用它?或者 predicate 本身是否可以存储在数据库中?
如果我在这方面完全错了,请引导我找到另一种方法来做这件事。否则,我们将不胜感激。谢谢大家,祝大家新年快乐。:)
1条答案
按热度按时间xv8emn3q1#
这是一个有趣的问题。我认为考虑到数据湖的情况,这种情况并不少见。
我认为,正如上面的评论所建议的,申请的方法是拥有
Predicate
. 您可能有一个 predicate ,将条件应用为AND
或者OR
然后提供给流处理器。像这样(假设您有一个基类Data
已将api输出Map到的对象):使用
and()
呼叫与呼叫相同.filter()
在流处理器上一个接一个。像这样:因此,您将能够在
for
循环。有没有一种方法可以像定制查询一样将其存储在数据库中并检索它,然后像 predicate 一样使用它?或者 predicate 本身是否可以存储在数据库中?
你可以在你的范围内做这件事
Predicate
它自己。也就是说,您可以通过数据库调用来获取java代码,而不是编写如上所示的逻辑。但是,您必须使用JavaCompiler
. 这可能有点复杂。但是,您可以考虑使用基于jvm的脚本语言,比如groovy来实现这些功能。