我有一个Employee
的列表,我只想检索一个特定名称的Employee
信息:
public static Employee getAllEmployeeDetails(String employeeName) {
List<Employee> empList = getAllEmployeeDetails();
Employee employee = empList.stream().filter(x -> x.equals(employeeName));
return employee;
}
请让我知道如何过滤数据并返回单个元素。
答案 0 :(得分:5)
您正在寻找findFirst
或findAny
:
empList.stream()
.filter(x -> x.getName().equals(employeeName))
.findFirst()
或
empList.stream()
.filter(x -> x.getName().equals(employeeName))
.findAny();
但是,我建议使用Optional
来更改方法返回类型,该方法旨在用作方法返回类型,其中
有必要代表“没有结果”。换句话说,我们让“客户”决定在“无价值”的情况下该做什么。即
public static Optional<Employee> getAllEmployeeDetails(String employeeName) {
return empList.stream()
.filter(x -> x.getName().equals(employeeName))
.findFirst()
}
您本可以做.findFirst().orElse(null)
,但与nullity
交往有时很危险,这是利用Optional<T>
API的绝好机会。
答案 1 :(得分:4)
这将找到与给定名称匹配的第一个Employee
,如果找不到,则找到null
:
Employee employee = empList.stream()
.filter(x -> x.getName().equals(employeeName))
.findFirst()
.orElse(null);
答案 2 :(得分:1)
您好,您可以使用多种方法从列表中获取单个对象,在这里我只是修改了方法名称以及一些变量名称,以便代码应可读,还应尝试使用Optional,因为它可以处理空指针
public static Employee findEmployeeByName(String employeeName) {
List<Employee> empList = getAllEmployeeDetails();
Optional<Employee> employee = empList.stream()
.filter(employee -> employee.getName().equalsIgnoreCase(employeeName))
.findFirst();
return employee.isPresent() ? employee.get() : null; // Instead of null you can also return empty Employee Object
}