我有一个地图对象列表。这些地图对象具有属性/键,例如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 = true
和condition_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"));
}
});