有时为了更好的封装,需要将函数作为参数进行传递,以便更好的复用。

比方说现在有个需求:

  有一个列表,需要根据不同的条件进行筛选,想用filter进行筛选,由于筛选情况较多,难道要写多个判断函数么?这时候就需要用到将函数作为参数进行传递了。

  Function传入两个参数,一个是入参,一个是返回值。这里User是入参,Boolean是返回值。

  使用Function的apply方法,接受入参,处理并返回。

public List<User> getUsersByFilter(Function<User, Boolean> filter) {
    return getUserList().stream().filter(user -> filter.apply(user)).collect(Collectors.toList());
}

  Function的使用如下:直接使用lamboda表达式,user作为入参,boolean返回值

public List<User> getMen() {
    return getUsersByFilter(user -> user.getGender() == 1)
}

  filter中通过apply调用传入的lamboda函数,有点绕,仔细理解一下。

知止而后有定;定而后能静;静而后能安;安而后能虑;虑而后能得。