java使用函数作为参数

时间:2017-05-22 03:07:43

标签: java function

public static <E extends EntityBase, FE>
FE findForeignEntity(E entities, Function<E, Long> fnForeignId, Function<Long, FE> fnFindIdIn) {
    if (entities == null) return null;
    Long fid = fnForeignId.apply(entities);
    return fnFindIdIn.apply(fid);
}

City city = Utils.findForeignEntity(candidate,
            c -> c.getAddress() != null ? c.getAddress().getCity() : null,
            fid -> cityRepo.findOne(fid));

什么是“fid”代表什么?我不熟悉java中的这种用法。 任何人都可以给我一些线索。

3 个答案:

答案 0 :(得分:1)

在方法findForeignEntity中,您传递了3个参数,第一个是entities,它是方法fnForeignId的参数。 方法fnForeignId的结果是fidfid是方法fnFindIdIn的输入,它返回FE(外国实体)。

City city = Utils.findForeignEntity(candidate,
            c -> c.getAddress() != null ? c.getAddress().getCity() : null,
            fid -> cityRepo.findOne(fid));

在此代码中,您可能会感到困惑lambdas。我会尽量简单。您的方法findForeignEntity的两个参数是Function,它是functional interface,需要定义。

方法fnForeignId的定义是

c -> c.getAddress() != null ? c.getAddress().getCity() : null

类似

return c.getAddress() != null ? c.getAddress().getCity() : null

方法fnFindIdIn的定义是

fid -> cityRepo.findOne(fid)

可以像

那样读取
return cityRepo.findOne(fid)

这些都是在Java8中引入的lambdas

正如@GhostCat告诉fid代表外国身份。

答案 1 :(得分:0)

显然,fid缩写&#34;外国id&#34;。

如果你问的是 - &gt;语法:这是lambda expression。他们的主要目标是:

  

Lambda表达式允许您更紧凑地表达单方法类的实例。

但显然有很多&#34;落后&#34;那个概念。

答案 2 :(得分:0)

你在寻找一个lambda表达式吗?看看java's documetation就可以了。 Lambdas是一种使用函数作为参数的好方法,但它只能是一行函数。快速解决问题的方法。