【问题标题】:Java Library to query Collections/Objects用于查询集合/对象的 Java 库
【发布时间】:2017-01-15 11:09:20
【问题描述】:

我正在寻找允许我查询集合的 Java 库。我偶然发现了jFilterJoSql

然而,JoSql 似乎自 2010 年以来一直处于非活动状态,并且只有 2 个版本。 jFilter 似乎相当新,自去年以来没有任何新版本。

在谷歌上搜索它们中的任何一个时,搜索结果的数量很少,这表明它们没有被广泛使用。

您对这些库有什么建议,或者知道更活跃的一次吗?

【问题讨论】:

  • 我正在使用Apache commons collections(commons.apache.org/proper/commons-collections),我对这个库很满意。还有Guava (stackoverflow.com/a/14979043/1051783) 提供了很多有用的API
  • 您最有可能在 C# 中寻找类似 LINQ 的东西。当你想做一些函数式编程之类的事情时,Guava 是一个不错的选择。这取决于您的应用程序,但通常所有这些技术都比您自己迭代集合要慢得多。

标签: java collections


【解决方案1】:

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

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

此外,当您对集合执行搜索时,CqEngine 不会迭代整个集合然后检查每条记录是否与谓词匹配。相反,它将直接在类似 Map 的数据结构中找到匹配的记录。因此,您将获得出色的表现。

【讨论】:

  • CqEngine 至少可以说看起来很有趣,语法也看起来比 jFilter 更具可读性。然而,它似乎只活跃了一年的大部分时间。自 2012 年 12 月以来没有任何活动
  • 我认为 CqEngine 的一个缺点是它不使用反射,我确实喜欢定义属性的概念。但是,我不希望必须为某人可能想要搜索的每个模型中的每个成员实现所有这些属性。
  • CQEngine 已激活!最后一个版本是在 2012 年 12 月,只是因为没有人报告该版本的错误,它基本上对我作为作者有效。如果人们报告错误,就会有活动!实际上支持反射,请参阅ReflectiveAttribute。最近(2013 年 7 月)在讨论组中讨论了自动索引 POJO 和通过注释自动生成属性的功能,因此这将很快导致新版本发布(可能是 1.1)。
  • 与其他方法相比,CQEngine 的内存占用是多少?关于集合的大小和/或查询的复杂性使使用 CQEngine 成为比 a) 仅迭代集合和 b) 做类似事情的其他方法更好的选择的任何概念?我在网上没有看到任何此类信息。
  • CQEngine site 上有一个基准。在 IndexQuantization 和 CQEngine forum 中还讨论了内存开销和可以调整它的各种方式(控制内存使用和检索速度之间的所需权衡)。
【解决方案2】:

您可以查看Commons Collections,更具体地说是CollectionUtils.filter(Collection, Filter)

另一个选项是Google Guava,它有Iterables.filter(Iterable<T>, Predicate<? super T>)

选择权在你。

【讨论】:

  • 感谢您指出这些。然而,由于我们正在处理一个框架,所以女巫缓存了一大堆集合,就像在内存表中一样(就是这样)。我想摆脱对过滤器的硬编码。
【解决方案3】:

可能为时已晚,但可能对其他人有帮助, 你可以使用,

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;
    }
}

【讨论】:

    猜你喜欢
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多