2017-08-21 106 views
1

我試圖找出爲什麼下面的代碼無法編譯:JAVA功能鏈接

Function<Employee, String> getLastName = (Employee employee) -> { 
    return employee.getName().substring(employee.getName().indexOf(" ") + 1); 
}; 

Function<Employee, String> getFirstName = (Employee employee) -> { 
    return employee.getName().substring(0, employee.getName().indexOf(" ")); 
}; 

Function chained = getFirstName.apply(employees.get(2).andThen(getFirstName.apply(employees.get(2)))); 

不能全功能在Java 8 cahined?

+0

是隻有一個項目可以從每個函數返回?在這種情況下,鏈接會試圖返回2? –

+0

我想我有理由:與上面類似,每個函數鏈接在前一個結果上運行,所以在這種情況下,它不是合理的代碼。 –

回答

4

恰好,andThen是從Function應用於結果,例如:

Function<Employee, String> chained = getFirstName.andThen(x -> x.toUpperCase()); 

x -> x.toUpperCase()(或這可以用一個方法參考String::toUpperCase被替換)從getFirstName函數施加到String結果。

你如何鏈接他們?一個Function返回String,這樣就無法鏈接。 你可以通過一個單一的Function返回這兩個領域:

Function<Employee, String[]> bothFunction = (Employee employee) -> { 
     String[] both = new String[2]; 
     both[0] = employee.getName().substring(employee.getName().indexOf(" ") + 1); 
     both[1] = employee.getName().substring(0, employee.getName().indexOf(" ")); 
     return both; 
    }; 
+0

不錯的解釋。 –