1

我有一个集合,一个地图列表,地图是Map<String, String>. 我需要通过比较、逻辑、类似而不是运算符来查询这个集合。类似 SQL 的东西。

我将从数据库存储过程中填充列表,所以我不确定大小。但是,我猜大小不应该超过 10,000 条记录。

在发布这篇文章时,我正在查看 Apache 仿函数,我不知道他们是否会在这里提供帮助。

我正在考虑的其他方法是使用内存数据库 Derby 来实现这一点。

请让我知道任何 Java 库或任何其他方式。

列表中的地图如下所示:

Map<String, String> m1 = new Map<String, String>();
m1.put("name","Mark");
m1.put("age","21");
m1.put("city","some city");

Map<String, String> m1 = new Map<String, String>();
m1.put("name","David");
m1.put("age","25");
m1.put("city","other city");

我需要查询列表以获取具有以下内容的 Map:

  1. name=Mark
  2. name=Mark and age > 30
  3. city not in "other city"
4

4 回答 4

2

看看CQEngine - 集合查询引擎

作为作者,我有偏见,但这将比依赖迭代和过滤的方法表现更好,扩展性更好。

它提供了一个java.util.Set(IndexedCollection) 的实现,它允许基于对其属性的(任意复杂的)查询来检索对象。

于 2014-05-06T14:10:24.107 回答
2

您可以使用Google Collections/Gauva。它提供带有谓词的集合过滤:

Iterables.filter(Iterable, Predicate)

有关使用谓词进行过滤的示例,请参见此答案。

于 2012-05-29T19:36:13.030 回答
0

Quaere可以查询集合。在寻找基于内存数据库的解决方案之前,您应该先看看。

于 2012-05-29T18:52:14.017 回答
0

我发现JFilter可以帮助您过滤内存中的数据(java 对象)。以下是来自 JFilter 网站的描述。

JFilter 是一个简单且高性能的开源库,用于过滤(查询)、映射(选择)和减少(聚合)Java 集合中的对象。查询以 json 格式给出,如 Mongodb 查询。

我写了一篇关于JFilter与 Maps 结合使用的帖子,我将其用作存储数据和使用JFilter查询/过滤的通用方式

这是使用JFilter 查询/过滤内存数据的帖子的链接

于 2012-07-07T07:51:37.120 回答