Java函数链

时间:2017-08-21 18:08:04

标签: function java-8

我正在尝试找出以下代码无法编译的原因:

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中包含所有函数吗?

1 个答案:

答案 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;
    };