我有一个集合:
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”的地图。它应该返回一组地图(相同类型)。
如果可以通过不使用流来完成,我不介意,但我更喜欢流。
答案 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<>();