有時為了更好的封裝,需要將函數作為參數進行傳遞,以便更好的復用。
比方說現在有個需求:
有一個列表,需要根據不同的條件進行篩選,想用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函數,有點繞,仔細理解一下。
