Java库查询集合/对象

6

我正在寻找可以查询集合的 Java 库。我找到了 jFilterJoSql

然而,自 2010 年以来 JoSql 已经没有更新并且只有两个版本可用。jFilter 看起来比较新,但是去年以来也没有新增发布。

通过谷歌搜索时返回的少量结果,让我觉得这些库并不被广泛使用。

你有关于这些库的建议吗?或者你知道是否有更活跃的类似库吗?


我正在使用Apache commons collections(http://commons.apache.org/proper/commons-collections/),并且对这个库感到满意。此外,`Guava`(https://dev59.com/SmUp5IYBdhLWcg3w5Kg6#14979043)提供了许多有用的API。 - gunar
你可能正在寻找类似于C#中存在的LINQ的东西。当你想要做一些函数式编程时,Guava是一个不错的选择。这取决于你的应用程序,但通常所有这些技术都比自己迭代集合慢得多。 - ssindelar
3个回答

4

感谢您指出这些问题。然而,由于我们正在处理一个框架,其中有许多缓存的集合,就像内存表一样(这就是它的工作方式)。我想摆脱硬编码过滤器。 - dngfng

3

我在我的公司成功地使用了CqEngine (https://code.google.com/p/cqengine/)

当您实例化一个集合时,可以轻松定义一组索引。这比谓词更加强大。

此外,当您对集合执行搜索时,CqEngine不会遍历整个集合,然后检查每个记录是否与谓词匹配。相反,它将直接在类似于Map的数据结构中查找匹配的记录。因此,您将拥有出色的性能。


CqEngine看起来非常有趣,语法也比jFilter更易读。然而,它似乎只活跃了一年左右。自2012年12月以来没有任何活动。 - dngfng
我认为 CqEngine 的一个缺点是它不使用反射,我喜欢定义属性的概念。然而,我不想为每个模型中的每个成员实现所有这些属性,因为有人可能想要搜索它们。 - dngfng
1
CQEngine已经激活!最后一次发布是在2012年12月,只是因为没有人报告那个版本的错误,而且对于我作为作者来说基本上是可以工作的。如果有人报告错误,就会有活动!实际上支持反射,参见ReflectiveAttribute。最近(2013年7月)在讨论组中讨论了自动索引POJO和通过注释自动生成属性的功能,因此这将很快导致新版本的发布(可能是1.1)。 - npgall
CQEngine与其他方法相比的内存占用情况如何?在集合大小和/或查询复杂性达到什么程度时,使用CQEngine会比a)只是迭代集合和b)执行类似操作的其他方法更好?我在网上没有看到任何此类信息。 - mister blinky
CQEngine网站上有一个基准测试。此外,还讨论了关于内存开销的问题,以及可以进行调整的各种方式(控制所需的内存使用和检索速度之间的权衡),在IndexQuantization和CQEngine 论坛中。 - npgall

2
也许现在已经太晚了,但这对其他人可能有帮助。你可以使用以下链接:https://code.google.com/p/joquery/,它支持以下语法:
Collection<Dto> testList = new ArrayList<>();

Filter<Dto> query = CQ.<Dto>filter(testList)
    .where()
    .property("id").eq().value(1);
Collection<Dto> filtered = query.list();

class Dto
{
    private int id;
    private String text;

    public int getId()
    {
        return id;
    }

    public int getText()
    {
        return text;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接