Java8之Function函數
在一次項目中用到了Java的Function函數來使代碼看起不是那麼的臃腫,暫時隻了解了一個皮毛,自己寫了一個例子在深入一下,有問題的地方還希望大家指正。
首先我先抽出來一個公共的類,叫People,它裡邊有一個執行的方法mainWork
public class People {
private String work;
private String sex;
public String getWork() {
return work;
}
public void setWork(String work) {
this.work = work;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String mainWork(People people){
String s = "";
if ("0".equals(people.getSex())) {
//男人
System.out.println("===People輸出====男人負責"+people.getWork());//這裡當做日志輸出
s= "男人負責"+work;
}
if ("1".equals(people.getSex())) {
//女人
System.out.println("===People輸出====女人負責"+people.getWork());//這裡當做日志輸出
s = "女人負責"+work;
}
return s;
}
}
我然後寫了一個抽象的類,裡邊隻有一個方法execute,用于統一處理我下邊需要調用people類的操作,在其中我在裡邊定義了兩個個String類型的的參數,另外還有一個Function函數,函數裡的參數為我的People類以及傳回String字元串
import java.util.function.Function;
public abstract class AbstrPeopWork {
People people = new People();
public void execute(String work,String sex, Function<People,String> function){
people.setWork(work);
people.setSex(sex);
String s = function.apply(people);
//執行請求玩的參數可用于處理其他業務
System.out.println("==AbstrPeopWork的execute的輸出=="+s);
}
}
然後我又定義了兩個類,一個是男人,一個是女人,在他們這裡的方法裡邊本來是需要分别調用Peopled的mainWork方法的,而且還需要在這個方法李輸入很多行代碼去處理該有的邏輯,但是我使用他們繼承我的這個抽象類,調用抽象類裡邊execute,這樣我們後期再加比如說是小孩的類我們就很好寫了,我們不需要動用太多代碼就可以實作小孩操作。
public class Man extends AbstrPeopWork {
public void man(){
execute("賺錢養家",
"0",
people -> people.mainWork(people));
}
}
//在這裡我使用了兩種方式去使用我抽象類裡邊的這個
//方法裡邊的Function的調用,友善大家能對比看一下
import java.util.function.Function;
public class Woman extends AbstrPeopWork{
public void woman(){
execute("貌美如花", "1", new Function<People, String>() {
@Override
public String apply(People people) {
return people.mainWork(people);
}
});
}
}
其中
people -> people.mainWork(people)
和
new Function<People, String>() {
@Override
public String apply(People people) {
return people.mainWork(people);
}
實際上是一樣的效果
運作結果:
===People輸出====男人負責賺錢養家
==AbstrPeopWork的execute的輸出==男人負責賺錢養家
===People輸出====女人負責貌美如花
==AbstrPeopWork的execute的輸出==女人負責貌美如花
能力有限,隻能寫到這裡了,歡迎大家前來指點。