如何通过对象集合流式传输和收集实例方法?

时间:2019-04-04 11:17:55

标签: java java-stream

要求是流式处理一组对象,根据某些条件进行过滤,并仅收集一组字符串中的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>

注意:除私有变量外,不能将实例变量设为任何其他变量。

3 个答案:

答案 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"