我正在尝试找出以下代码无法编译的原因:
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中包含所有函数吗?
答案 0 :(得分:5)
确切地说,andThen
已应用于Function
的结果,例如:
Function<Employee, String> chained = getFirstName.andThen(x -> x.toUpperCase());
x -> x.toUpperCase()
(或此方法可以替换为方法引用String::toUpperCase
)已应用于String
函数的getFirstName
结果。
你觉得如何链接它们?一个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;
};