使用Java8流API从列表中检索单个对象

时间:2018-12-11 07:11:24

标签: 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;
}

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

3 个答案:

答案 0 :(得分:5)

您正在寻找findFirstfindAny

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
}