java - 过滤地图列表的元素,然后在java 8+中返回地图
问题描述
我想过滤地图列表的元素,然后在java 8+中返回地图
public class Test {
List<Employee> list1 = new ArrayList<>();
list1.add(emp1); // emp1's filterEmployee return true
list1.add(emp2); // emp2's filterEmployee return true
list1.add(emp3); // emp3's filterEmployee return false
List<Employee> list2 = new ArrayList<>();
list2.add(emp4); // emp4's filterEmployee return false
list2.add(emp5); // emp5's filterEmployee return true
list2.add(emp6); // emp6's filterEmployee return true
map.put("Sales", list1);
map.put("Tech", list2);
public Map<Department, List<Employee>> getEmployeeByDepartment( Map<Department, List<Employee>> map)
{
return map1;
}
static boolean filterEmployee(Employee employee)
{
check employee something and filter out based on some critiea
and return true or false based on that
}
}
在 getEmployeeByDepartment 方法中,对于地图中的每个条目,使用下面的 filterEmployee 方法过滤地图值列表中的员工,返回的 map1 将包含地图,使得
<"Sales", list1.add(emp1)> // emp1 的 filterEmployee 返回 true
<"Sales", list1.add(emp2)> // emp2 的 filterEmployee 返回 true
<"Tech", list2.add(emp5)> // emp5 的 filterEmployee 返回 true
<"Tech", list2.add(emp6)> // emp6 的 filterEmployee 返回 true
我一直在尝试这个和下面的那个,但没有奏效
Map<Department, List<Employee>> map2 = map.entrySet().stream().filter(entry -> entry.getValue().stream().filter(Test::filterEmployee).collect(Collectors.toMap((Department)entry.getKey(), (List<Employee>)entry.getValue())));
解决方案
假设
Predicate<Employee> test;
Map<Department,List<Employee>> map;
你有几个选择:
对地图的就地更改:
map.values().forEach(el -> el.removeIf(Predicate.not(test)));
插入新地图:
Map<Department,List<Employee>> result = new HashMap<>();
map.forEach((d, el) -> result.put(d, el.stream().filter(test).collect(toList()));
通过流处理创建:
Map<Department,List<Employee>> result = map.keySet().stream()
.collect(toMap(d -> d, d -> map.get(d).stream().filter(test).collect(toList())));
还有其他选择,但这些是最明显的选择。
推荐阅读
- c++ - 如何从 C++ 中的父线程或子线程将值传递给子线程下的孙线程
- c - 将文件行读入一个由 \r\n 分隔的字符串
- javascript - 如何检测元素是否为表单元素
- flutter - “列”附近:语法错误。在 sqflite 颤动中重命名或删除列时出现问题
- ansible - ANSIBLE - systemd {"changed": false, "msg": "Service is in unknown state", "status": {}}
- mysql - 我如何获得 MySQL JOIN 的结果,其中记录符合联接表中的值标准?
- python - scikit-build 不适用于 sub_directory 项目依赖项
- java - 为什么 Java RMI 使用注册表?
- python-3.x - 如何从函数中的字符串中删除特殊单词
- python - 将pandas数据框写入excel文件时,每次迭代后添加后缀号