如何Map<String, List<Employee>>使用Java 8过滤器过滤?
我仅在列表中的任何员工具有字段值时才进行过滤Gender = "M"。
输入:Map<String,List<Employee>>
输出:Map<String,List<Employee>>
过滤条件:Employee.genter = "M"
另外,如果List <>在地图值上为空,我还必须在输出地图中过滤掉键(或过滤地图[我们在过滤后得到的新地图])
如何使用java8流和过滤器过滤嵌套循环?
假设我有一个汽车列表(List<Car>),每辆汽车都有一个引擎列表(List<Engine>),每个引擎都有一个List<Parts>。在常规Java中,此结构可以描述为:
for(Car car : cars) {
for (Engine engine : car.getEngines()) {
for (Part part : engine.getParts()) {
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
假设我将汽车清单初始化为:
List<Car> cars = new ArrayList<Car>(Arrays.asList(new Car(), new Car(), new Car()));
cars.get(0).setEngines(null);
cars.get(1).setEngines(new ArrayList<Engine>());
cars.get(2).setEngines(new ArrayList<Engine>() {{
add(new Engine());
add(null);
add(new Engine());
}});
Run Code Online (Sandbox Code Playgroud)
如果我想滤除的null List<Engine>,那么我会做
cars.stream().filter(p -> p.getEngines() != null).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
如果我想过滤出列表的空数组列表,那么我会做
cars.stream().filter(p -> !p.getEngines().isEmpty()).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
但是,如何删除Engine第3辆汽车中的空值,又如何将其他两个引擎附加到原始列表结构?换句话说,我们可以使用Java 8过滤器进入第二,第三,第n层结构,还是仅在最顶层使用过滤器?我也尝试使用.anyMatch(),没有多大运气。
为了进一步说明,考虑以下示例:我的车库中有3辆车。每辆汽车有3个引擎占位符。每个引擎都有3个占位符,用于占组成引擎的零件:
Car #1:
Engine#1: part1, part2, part3
Engine#2: null, …Run Code Online (Sandbox Code Playgroud)