查询内存中的集合
我有一个集合,一个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:
-
name=Mark
-
name=Mark and age > 30
-
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的链接