Получить один объект из списка, используя API потока java8 - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть список Employee, и я хочу получить только одну Employee информацию с указанным именем:

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

Пожалуйста, дайте мне знать, как отфильтровать данные и вернуть одинэлемент.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вы ищете 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.

0 голосов
/ 11 декабря 2018

При этом будет найдено первое Employee, соответствующее указанному имени, или null, если не найдено:

Employee employee = empList.stream()
                           .filter(x -> x.getName().equals(employeeName))
                           .findFirst()
                           .orElse(null);
...