Java 使用compose()而不是lambda表达式的原因是什么?

Java 使用compose()而不是lambda表达式的原因是什么?,java,java-8,Java,Java 8,我将默认方法的使用与其等效的lambda表达式进行了比较,但找不到任何理由选择前者 可能原因与代码表现力或函数式编程有关,如前所述 然而,比较这两种方法来解决这个问题,我只看到使用compose()而不是lambda表达式的缺点 根据以下内容,使用compose()进行第一次进近: 函数personToAddress=Person::getAddress; 函数addressToCountry=地址::getCountry; 函数toCountry=addressToCountry.compos

我将默认方法的使用与其等效的lambda表达式进行了比较,但找不到任何理由选择前者

可能原因与代码表现力或函数式编程有关,如前所述

然而,比较这两种方法来解决这个问题,我只看到使用
compose()
而不是lambda表达式的缺点

根据以下内容,使用
compose()
进行第一次进近:

函数personToAddress=Person::getAddress;
函数addressToCountry=地址::getCountry;
函数toCountry=addressToCountry.compose(personToAddress);
使用lambda表达式的第二种方法:

Function<Person, String> toCountry = p -> p.getAddress().getCountry();
函数toCountry=p->p.getAddress().getCountry();
为什么我更喜欢第二个?首先,它不那么冗长。其次,它不需要显式的辅助变量
personToAddress
addressToCountry


那么,使用
compose()
而不是显式使用lambda有什么原因吗?

一个原因是如果您没有在同一段代码中创建一个或两个函数,而是从其他地方传入它们。然后,您可以编写一个lambda,在给定函数上调用
apply()
,或者使用
compose()
,这可能会更干净。

当两个函数传递给您时,第二个函数是合适的。i、 在你的简单例子中,你既知道如何从一个人那里得到地址,又知道如何从地址中得到国家。但是如果你不知道怎么找到地址呢?如果
人员
列表
,而您不知道需要哪一个呢?然后,您可以从客户端调用站点请求映射程序并编写答案。您可以使用强制转换将方法引用链接到
函数
类型
Function<Person, String> toCountry = p -> p.getAddress().getCountry();