如何处理java流api中的可选对象?

sag*_*mbu 2 java java-stream

我在做简单的测试。

@Test
    public void whenFilterEmployees_thenGetFilteredEmployees(){
        Integer[] empIds = {1,2,3};
        List<Optional<Employee>> employees = Stream.of(empIds)
                .map(employeeRepository::findById)
                .collect(Collectors.toList());

        List<Employee> employeeList = employees
                .stream().filter(Optional::isPresent)
                .map(Optional::get)
                .filter(e->e !=null)
                .filter(e->e.getSalary()>200000)
                .collect(Collectors.toList());

        assertEquals(Arrays.asList(arrayOfEmps[2]), employeeList);


    }
Run Code Online (Sandbox Code Playgroud)

我的员工表包含数据:

1   Jeff Bezos  100000
2   Bill Gates  200000
3   Mark Zuckerberg 300000
Run Code Online (Sandbox Code Playgroud)

当前测试成功运行。

如您所见,我准备了两个员工列表,即员工和员工列表

我这样做是因为findById方法返回 Optional。我如何使用流 api 以便我可以简单地获取员工列表

List<Employee> employeeList= ....
Run Code Online (Sandbox Code Playgroud)

Ous*_* D. 5

只需合并两个流管道即

List<Employee> employees = Stream.of(empIds)
                                 .map(employeeRepository::findById)
                                 .filter(Optional::isPresent)
                                 .map(Optional::get)
                               //.filter(e->e !=null) not needed as it's redundant
                                 .filter(e->e.getSalary()>200000)
                                 .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)