我有一个地图对象列表。这些地图对象具有属性/键,例如id,condition_1,condition_2等。示例地图如下所示,

List<Map<String, Object>> allItems = Lists.newArrayList();

Map<String, Object> paramsMap = Maps.newHashMap();

paramsMap.put("id", "a");
paramsMap.put("condition_1", false);
paramsMap.put("condition_2", true);
paramsMap.put("condition_3", false);

allItems.add(paramsMap);


因此,我需要过滤allItems对象,以便它仅包含具有condition_1 = truecondition_2 = false等的地图对象。

我考虑过使用apache commons CollectionUtils.filter,但这似乎无法解决我的问题,因为我无法将映射项指定为过滤条件。

我也不反对使用Google Guava,但是我找不到一个好的解决方案。

基本上,我试图模仿出色的JavaScript库underscore.js中的_.where功能。

最佳答案

一种番石榴解决方案:

Iterables.filter(allItems, new Predicate<Map<String, Object>>() {
   @Override public boolean apply(Map<String, Object> map) {
      return Boolean.TRUE.equals(map.get("condition_1"))
         && Boolean.FALSE.equals(map.get("condition_2"));
   }
});

10-08 01:30