首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何做函数组合?

如何做函数组合?
EN

Stack Overflow用户
提问于 2013-11-07 19:20:45
回答 2查看 13.7K关注 0票数 36

在相当不耐烦地等待Java8发布的时候,在阅读了brilliant 'State of the Lambda' article from Brian Goetz之后,我注意到function composition根本没有被涉及到。

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

代码语言:javascript
复制
// 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映射到country的函数,我如何在Java8中实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-07 21:44:37

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

代码语言:javascript
复制
Function<Person, String> toCountry = personToAddress.andThen(addressToCountry);
票数 57
EN

Stack Overflow用户

发布于 2015-09-29 16:09:14

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

代码语言:javascript
复制
(Person::getAddress).andThen(Address::getCountry)

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

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

代码语言:javascript
复制
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)
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19834611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档