繁体   English   中英

如何进行函数组合?

[英]How to do function composition?

在相当不耐烦地等待 Java 8 发布并阅读了 Brian Goetz 的精彩“Lambda 状态”文章后,我注意到函数组合根本没有被涵盖。

根据上面的文章,在 Java 8 中,以下应该是可能的:

// having classes Address and Person
public class Address {

    private String country;

    public String getCountry() {
        return country;
    }
}

public class Person {

    private Address address;

    public Address getAddress() {
        return address;
    }
}

// we should be able to reference their methods like
Function<Person, Address> personToAddress = Person::getAddress;
Function<Address, String> addressToCountry = Address::getCountry;

现在,如果我想将这两个函数组合成一个将Person映射到国家的函数,我如何在 Java 8 中实现这一点?

default接口函数Function::andThenFunction::compose

Function<Person, String> toCountry = personToAddress.andThen(addressToCountry);

使用composeandThen有一个缺陷。 你必须有显式变量,所以你不能像这样使用方法引用:

(Person::getAddress).andThen(Address::getCountry)

它不会被编译。 太遗憾了!

但是你可以定义一个效用函数并愉快地使用它:

public static <A, B, C> Function<A, C> compose(Function<A, B> f1, Function<B, C> f2) {
        return f1.andThen(f2);
    }

compose(Person::getAddress, Address::getCountry)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM