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