要求是流式处理一组对象,根据某些条件进行过滤,并仅收集一组字符串中的employeeID
class Employee {
private String empId;
private int type;
public int getType() {
return type;
}
public String getEmpId() {
return empId;
}
}
在过滤以下语句时
employees.stream().filter(x-> x.getType() == 1).collect(Collectors.toSet());
返回一个Set<Employee>
,而我只想收集empId,即Set<String>
注意:除私有变量外,不能将实例变量设为任何其他变量。
答案 0 :(得分:2)
employees
.stream()
.filter(x-> x.getType() == 1)
.map(Employee::getEmpId)
.collect(Collectors.toSet());
将返回包含员工ID的Set<String>
。
答案 1 :(得分:2)
使用map()
将Employee
实例映射到相应的员工ID。
Set<String> empIds =
employees.stream()
.filter(x-> x.getType() == 1)
.map(Employee::getEmpId)
.collect(Collectors.toSet());
答案 2 :(得分:1)
如果您还需要原始的toMap
,则可以改用Map<String, Employee> employeesById = employees.stream()
.filter(e-> e.getType() == 1)
.collect(Collectors.toMap(Employee::getEmpId, Function.identity()));
。
Set
如果您以后需要解决员工的问题,这特别有用。如果不适用,则首选上述解决方案。
此外,Set<String> employeeIds = employeesById.keySet();
仍可以通过以下方式获得:
import _ "github.com/go-sql-driver/mysql"