查询内存中的集合

时间:2012-05-29 18:41:20

标签: java collections

我有一个集合,一个地图列表,地图是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 个答案:

答案 0 :(得分:2)

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

  

Iterables.filter(Iterable,Predicate)

有关使用谓词进行过滤的示例,请参阅this answer

答案 1 :(得分:2)

看看CQEngine - Collection Query Engine

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

我在地图上使用post写了一个JFilter,我将其用作使用JFilter

存储数据和查询/过滤的通用方法

以下是使用JFilter to query/filter in-memory data

的帖子的链接