在检查null时,从对象列表中创建唯一的值列表

use*_*485 2 java lambda java-8 java-stream

比如,有一个班,员工

@Getter
Class Employee {
    empId;
    empName;
    empDept;
}
Run Code Online (Sandbox Code Playgroud)

我试图从String部门的员工列表中获取逗号分隔的独特部门列表(例如:'销售','技术','运营','培训')

List<Employee> employees = getListOfEmployees();
String departments = getUniqueDepartments(employees);
Run Code Online (Sandbox Code Playgroud)

这就是我想要的:

String getUniqueDepartments(final List<Employee> employees) {
    return employees.stream().filter(emp -> emp.getEmpDept()!=null)
                      .map(emp -> String.format("'%s'", emp.getEmpDept()))
                      .collect(Collectors.joining(","))
}
Run Code Online (Sandbox Code Playgroud)

如何在此基础上添加distinct子句?

Ous*_* D. 5

简单地说,distinctcollect还原操作之前添加中间操作,即:

...
...
.map(emp -> String.format("'%s'", emp.getEmpDept()))
.distinct()
.collect(Collectors.joining(","));
Run Code Online (Sandbox Code Playgroud)