天天看點

Java8之Function函數

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的輸出==女人負責貌美如花
           

能力有限,隻能寫到這裡了,歡迎大家前來指點。