Java 8 如何在没有 Lambda 的情况下编写函数?

标签 java function lambda function-composition

我只见过如下示例,用于编写函数(或使用 lambda 的人)。

Function<A,B> inner = ....;
Function<B,C> outter = ....;
Function<A,C> result = outter.compose(inner);

我想使用“组合”功能组合以下函数,而不仅仅是直接调用它们。

public class J{ 
  public static B inner(final A a){...}
  public static C outter(final B b){...}      
}
public class K{
  public static Function<A,C> result = (J::outter).compose(J::inner);
}

这不会编译。我似乎无法使用 java.util.function.Function 的那个“组合”成员。对于传统声明的函数,我该怎么做?我想避免以下情况:

public class K{
  public static Function<A,C> result = (a)-> J.outter(J.inner(a));
}

可以吗??提前致谢

最佳答案

方法引用(和 lambda)需要上下文才能在源代码中有意义。该上下文描述了目标功能接口(interface),提供了泛型类型推断的详细信息等。

方法引用的使用

public static Function<A,C> result = (J::outter).compose(J::inner);

没有上下文。第一个 J::outter 应该是什么?为什么?

应用强制转换为其提供上下文

public static Function<A, C> result = ((Function<B, C>) J::outter).compose(J::inner);

在我看来,这比 lambda 解决方案更丑陋。

关于Java 8 如何在没有 Lambda 的情况下编写函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31929564/

相关文章:

java - ActionBarSherlock 4.2 是否支持 SearchView 的搜索建议?

java - Spring 在运行时针对特定时间安排任务

java - 第一次无法上传图片,第二次就可以了

c - c 指针字符串的问题

amazon-web-services - 适用于不同用户角色的 AWS Serverless Protect API 路径

java - 用于线程安全的未绑定(bind)缓存的 ThreadLocal HashMap 与 ConcurrentHashMap

r - 尝试为包创建函数,该函数在存在分类变量时自动绘制给定模型的变量响应

正确地从函数传递数组

c++ 转换与 if_then_else 控制结构

c++ - lambda 始终返回 '1'