簡體   English   中英

Java 8流使用Map調用方法

[英]Java 8 streams calling a method using map

我想清理每個員工對象上的一些數據。我正在嘗試這樣做,但無法實現所需的輸出。 如何使用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

您為什么不只是迭代對象並進行修改?

bulkEmployeeClean( Collection<Employee> entities){
    entities.forEach(this::cleanEmployee)
}
entities.stream()
        .forEach(employee->cleanEmployee(employee))
  1. 首先map()是中間流操作。 您從中間操作而不是Collection返回Stream。
  2. Next流是惰性的init,這意味着它們將在終端操作運行之前不執行。 因此,您需要進行一次終端操作。
  3. 如果要回收,則可以使用終端操作,例如collect(Collectors.toList())
  4. 當您對原始集合進行操作時,無法對其進行修改。 您將獲得ConcurrentModificationException。

我建議改用過濾器選項

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

這是如果您要清除Employee對象。 如果您需要在其中進行編輯,則可以對其進行迭代並在每個對象上調用clean方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM