Java流集合地图

时间:2016-06-30 07:58:47

标签: java dictionary collections filter java-stream

我有一个集合:

Collection<Map<String, Object>> items = new ArrayList();
Map<String, Object> item1 = new HashMap();
Map<String, Object> item2 = new HashMap();

item1.put("first_name", "john");
item1.put("last_name", "doe");

item2.put("first_name", "jane");
item2.put("last_name", "doe");

items.add(item1);
items.add(item2);

我想在集合中过滤掉所有将“first_name”设置为“jane”的地图。它应该返回一组地图(相同类型)。

如果可以通过不使用流来完成,我不介意,但我更喜欢流。

1 个答案:

答案 0 :(得分:1)

不太难做。只需将其添加到您的代码中即可。

Collection<Map<String, Object>> items2 = items.stream().filter(a -> !"jane".equals(a.get("first_name"))).collect(Collectors.toList());

你需要指定如果地图根本不包含键“first_name”会发生什么,我假设它需要有一个first_name键(不是jane)才能有效的后置过滤器

另外,只是抬头。您现有的代码未正确使用泛型;我的IDE至少给了我一个关于前三行未经检查的演员的警告。在Java 1.7之后,您可以让它推断泛型类型参数,但您仍然需要提供符号<>才能实现这一点。这是一个固定版本:

Collection<Map<String, Object>> items = new ArrayList<>();
Map<String, Object> item1 = new HashMap<>();
Map<String, Object> item2 = new HashMap<>();