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

标签 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);


    }

我的员工表包含数据:

1   Jeff Bezos  100000
2   Bill Gates  200000
3   Mark Zuckerberg 300000

当前测试运行成功。

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

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

List<Employee> employeeList= ....

最佳答案

只需合并两个流管道即

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());

关于java - 如何处理java streams api中的可选对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53061725/

相关文章:

java - 抽象 Action lambda

java - 如何将 MDC 与 ForkJoinPool 一起使用?

java - 深入比较数组中的每个元素

java - 惰性流操作和 stream() 的未解析引用

java - 使用 Java 8 更好地替换嵌套 for 循环中的代码

java - Apache CXF 客户端在测试需要服务器名称指示 (SNI) 的服务器时出错

java - JNIUS 和 TIKA - 尝试 parseToString 时出错

java - 高效的可增长的java字节数组,允许访问字节

java - 无法解析方法 spliterator JSONArray java8 流

java - java 8 文件/字数统计程序的奇怪输出