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)
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 表达式的教程