相关疑难解决方法(0)

Java 8筛选器映射<String,List <Employee >>

如何Map<String, List<Employee>>使用Java 8过滤器过滤?

我仅在列表中的任何员工具有字段值时才进行过滤Gender = "M"

输入:Map<String,List<Employee>>
输出:Map<String,List<Employee>>
过滤条件:Employee.genter = "M"

另外,如果List <>在地图值上为空,我还必须在输出地图中过滤掉键(或过滤地图[我们在过滤后得到的新地图])

java filtering java-8 java-stream

5
推荐指数
2
解决办法
2409
查看次数

如何使用Java 8流和过滤器过滤嵌套循环?

如何使用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)

java lambda filter java-8 java-stream

3
推荐指数
2
解决办法
1万
查看次数

标签 统计

java ×2

java-8 ×2

java-stream ×2

filter ×1

filtering ×1

lambda ×1