使用java8 stream api从列表中检索单个对象

aru*_*ect 3 java java-8 java-stream

我有一个列表Employee,我想只检索一个Employee具有特定名称的信息:

public static Employee getAllEmployeeDetails(String employeeName) {
    List<Employee> empList = getAllEmployeeDetails();
    Employee employee = empList.stream().filter(x -> x.equals(employeeName));
    return employee;
}
Run Code Online (Sandbox Code Playgroud)

请让我知道如何过滤数据并返回单个元素.

Era*_*ran 6

这将找到与Employee给定名称匹配的第一个,或者null如果找不到:

Employee employee = empList.stream()
                           .filter(x -> x.getName().equals(employeeName))
                           .findFirst()
                           .orElse(null);
Run Code Online (Sandbox Code Playgroud)


Ous*_* D. 5

你正在寻找findFirstfindAny:

empList.stream()
       .filter(x -> x.getName().equals(employeeName))
.findFirst()
Run Code Online (Sandbox Code Playgroud)

要么

empList.stream()
       .filter(x -> x.getName().equals(employeeName))
.findAny();
Run Code Online (Sandbox Code Playgroud)

但是,我建议更改方法返回类型,并将Optional其用作方法返回类型,其中需要表示"无结果".换句话说,我们让"客户"决定在"无价值"的情况下做什么.即

public static Optional<Employee> getAllEmployeeDetails(String employeeName) {
       return empList.stream()
           .filter(x -> x.getName().equals(employeeName))
          .findFirst()
}
Run Code Online (Sandbox Code Playgroud)

你可以做到.findFirst().orElse(null)但处理nullity有时是危险的,这是利用Optional<T>API 的绝佳机会.