有时为了更好的封装,需要将函数作为参数进行传递,以便更好的复用。
比方说现在有个需求:
有一个列表,需要根据不同的条件进行筛选,想用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函数,有点绕,仔细理解一下。