如何使用 Java 8 Streams 重写 For 循环和 If 语句

use*_*270 0 java if-statement java-stream

我的代码

final List<Employee> empList= getEmployeeList();
String empid = "1234";
Employee selectedEmp = new Employee();

for (Employee e1: empList) {
    if (empid .equals(e1.getEmpid()))
        selectedEmp = e1;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想用Java 8重写上面的代码。

我尝试过以下方法,但没有成功。我无法弄清楚翻译-if语句:

empList.stream()
    .foreach( <how to apply if condition here>)
Run Code Online (Sandbox Code Playgroud)

Ale*_*nko 8

forEach()在这里不是合适的工具。

首先,有一个方法Iterable.forEach()可以直接在列表上调用,而无需创建流,其次,Stream API 文档Stream.forEach()鼓励以这种方式使用它,当您没有其他适合的工具时,应谨慎使用它。任务。

相反,您可以使用组合filter()+ findFirst(),它会生成可选类型的结果。

要为未找到员工的情况提供默认值(例如在代码中 Employee 通过无参数构造函数创建的虚拟对象),您可以使用Optional.orElseGet()它期望Supplier仅在需要时应用的默认值(当可选为空时)。

public Employee findEmployee(String empid) {
    
    return getEmployeeList().stream()
        .filter(e -> empid.equals(e.getEmpid()))
        .findFirst()
        .orElseGet(Employee::new);
}
Run Code Online (Sandbox Code Playgroud)

我强烈建议您熟悉这些有关lambda 表达式的教程