Java 8流使用map

时间:2017-03-25 01:34:07

标签: java java-8 java-stream

我想清理每个员工对象上的一些数据。我正在尝试这样做,但无法实现所需的输出。如何使用Java8流功能?

bulkEmployeeClean( Collection<Employee> entities) {
  Collection<Employee> entities2 = entities.stream().map(employee->cleanEmployee(employee));
}


Employee cleanEmployee(Employee emp) {
  //clean the employee data 
}

我想要的输出是我想用java 8流清理每个员工对象

我得到以下错误: ErrorType不匹配:无法从void转换为Collection

3 个答案:

答案 0 :(得分:2)

为什么不迭代你的对象并进行修改?

bulkEmployeeClean( Collection<Employee> entities){
    entities.forEach(this::cleanEmployee)
}

答案 1 :(得分:1)

entities.stream()
        .forEach(employee->cleanEmployee(employee))

答案 2 :(得分:1)

  1. 首先map()是中间流操作。您从中间操作返回Stream而不是Collection。
  2. 下一个流是延迟初始化,这意味着在运行终端操作之前它们不会执行。所以你需要有一个终端操作。
  3. 如果您想要回复,可以使用collect(Collectors.toList())
  4. 等终端操作
  5. 在对其流进行操作时,无法修改原始集合。您将获得ConcurrentModificationException。
  6. 我建议使用过滤器选项

    List<Employee> activeEmployees = entities.stream().filter(employee -> employee.isActive()).collect(Collectors.toList())
    

    如果要清除Employee对象,则为此。如果你需要编辑那些你可以迭代它们并在每个对象上调用clean方法。