У меня есть список Employee, и я хочу получить только одну информацию о Employee с определенным именем:
public static Employee getAllEmployeeDetails(String employeeName) {
List<Employee> empList = getAllEmployeeDetails();
Employee employee = empList.stream().filter(x -> x.equals(employeeName));
return employee;
}
Пожалуйста, дайте мне знать, как отфильтровать данные и вернуть один элемент.




Это найдет первый Employee, соответствующий данному имени, или null, если он не найден:
Employee employee = empList.stream()
.filter(x -> x.getName().equals(employeeName))
.findFirst()
.orElse(null);
Вы ищете 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 иногда бывает опасной, и это прекрасная возможность использовать API Optional<T>.
Ага, это действительно хороший совет: отбросьте нули, верните Optionals.
а может orElseThrow, если критично получить на базе employeeName, мысли?
@nullpointer хороший крик! Я должен сказать, что это зависит и является спорным, но лично я придерживался предложенного подхода, потому что он предоставляет больше возможностей для клиента, а сигнатура метода с дополнительным типом возврата очень значима / удобочитаема.
Привет, вы можете использовать несколько способов получить один объект из списка здесь, я просто изменил имена методов, а также некоторые имена переменных, чтобы код был читабельным, а также попытаться использовать 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
}
Я предлагаю переименовать ваш метод в getEmployeeByName вместо getAllEmployeeDetails. читабельность очень важна.