查询内存中的集合

我有一个集合,一个Map的Map,地图是Map 。 我需要用比较来查询这个集合,逻辑,比如,不在运算符中。 像SQL这样的东西。

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

在发布这篇文章的时候我会看一下Apache functor,我不知道他们是否会在这里提供帮助。

我想到的其他方式是使用内存数据库Derby来实现这一点。

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

列表中的地图如下所示:

 Map m1 = new Map(); m1.put("name","Mark"); m1.put("age","21"); m1.put("city","some city"); Map m1 = new Map(); 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"

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

Iterables.filter(Iterable,Predicate)

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

看一下CQEngine – Collection Query Engine 。

我作为作者有偏见,但这比依赖迭代和过滤的方法更胜一筹。

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

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

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

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

我写了一篇关于使用JFilter和Maps的post ,我将其用作存储数据和使用JFilter查询/过滤的通用方法

以下是使用JFilter查询/过滤内存数据的post的链接