Java8流使用map调用方法

Java8流使用map调用方法,java,java-8,java-stream,Java,Java 8,Java Stream,我想清理每个employee对象上的一些数据。我正在尝试这样做,但无法实现所需的输出。如何使用Java8流特性实现这一点 bulkEmployeeClean( Collection<Employee> entities) { Collection<Employee> entities2 = entities.stream().map(employee->cleanEmployee(employee)); } Employee cleanEmployee(Em

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

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


Employee cleanEmployee(Employee emp) {
  //clean the employee data 
}
bulkEmployeeClean(收集实体){
Collection entities2=entities.stream().map(employee->cleanEmployee(employee));
}
员工清洁员工(员工环境管理计划){
//清理员工数据
}
我想要的输出是我想要用Java8流清理每个employee对象

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

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

entities.stream()
        .forEach(employee->cleanEmployee(employee))
bulkEmployeeClean( Collection<Employee> entities){
    entities.forEach(this::cleanEmployee)
}
bulkEmployeeClean(收集实体){
entities.forEach(this::cleanEmployee)
}
  • 首先map()是中间流操作。您从中间操作(而不是集合)获得返回流
  • 下一个流是lazy init,这意味着它们在终端操作运行之前不会执行。所以你需要有一个终端操作
  • 如果您想要反向收集,您可以使用诸如
    collect(Collectors.toList())
  • 在对原始集合的流进行操作时,无法修改原始集合。您将获得ConcurrentModificationException
  • 我建议改为使用过滤器选项

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

    这是如果要清除Employee对象。如果您需要编辑这些内容,您可以对这些内容进行迭代,并对每个对象调用clean方法。

    您希望的输出是什么,以及您当前的方法会得到什么结果?您需要提供更多信息。我发现此异常错误:类型不匹配:无法从void转换为Collection
    Collection entities2=entities.stream().map(employee->cleaneemployee(employee))
    此行错误
    map
    将不会返回任何内容,除非您正在使用
    collect
    方法进行采集。您只需执行一个
    forEach
    。是否要删除某些Employee对象?这将导致集合entities2=entities.forEach(This::cleanEmployee)失败;ErrorType不匹配:无法从void转换为CollectionJust do entities.forEach(this::cleanEmployee);删除实体2。如果您正在为每个对象执行
    操作,则不必将其分配给其他集合。原始集合将被修改。就这样。无需再次分配。