JDK1.8新接口Predicate及Function初步使用

本文代碼改自:http://www.concretepage.com/java/jdk-8/java-8-predicate-example

JDK1.8支持lambda expression,使用方式與傳統寫法差別不小。見代碼:

package collection.myInterface;

import java.util.Date;
import java.util.function.Function;

public class Start {
    public int length;
    public String name;
    public Date finddata;

    public Start() {
        length = 1;
        name = "fq";
        finddata = new Date();
    }

    public Start(int length, String name, Date finddata){
        this.length = length;
        this.name = name;
        this.finddata = finddata;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getFinddata() {
        return finddata;
    }

    public void setFinddata(Date finddata) {
        this.finddata = finddata;
    }

    public String show(Function<Start, String> func){
        System.out.println("======I'm Function.apply======"+func.apply(this));
        return "顯示信息: length="+this.length+";name="+this.name+";Date="+finddata;
    }

}

這是調用:

package collection.myInterface;

import java.util.function.Function;
import java.util.function.Predicate;

public class Client {

    public static void main(String[] args) {
        Predicate<Start> malestart = abs -> abs.length >= 20 && "male".equals(abs.name);
        Predicate<Start> femalestart = abs -> abs.length > 15 && "female".equals(abs.name);

        Function<Start, String> maleStyle = abs -> "Hi, You are male and length " + abs.length;

        Function<Start, String> femaleStyle = abs -> "Hi, You are female and length " + abs.length;

//      Start s1 = new Start(20, "male", null);
        Start s1 = new Start(20, "female", null);
        if (malestart.test(s1)) {
            System.out.println(s1.show(maleStyle));

            /*
             ======I'm Function.apply======Hi, You are male and length 20
              顯示信息: length=20;name=male;Date=null
             */

        } else if (femalestart.test(s1)) {
            System.out.println(s1.show(femaleStyle));
        }
    }

}

重點:

- 驗證方式

Predicate < Start > malestart = abs -> abs.length >= 20 &&
“male”.equals(abs.name);

此處Start是剛剛我自定義的類型,而abs就是這個類型的形參,以這個符號(->)做爲後面驗證條件的賦值。並把這種驗證稱做“malestart”驗證。轉換成傳統Java寫法是這樣:
Boolean malestart(Start abs){
return abs.length >= 20 && “male”.equals(abs.name);
}

- 定義function

Function < Start, String > maleStyle = abs -> “Hi, You are male and
length ” + abs.length;

Funtionrg後面的<>,第一個參數是入參類型,第二個是出參類型,maleStyle是函數名,(->)之後的是Function具體方法。轉義成Java的寫法是
String maleStyle(Start abs){
return “Hi, You are male and length ” + abs.length;
}

- 使用方法:

Start s1 = new Start(20, “female”, null); //這是要加驗證的對象 if
(malestart.test(s1)) { … }

– 這裏就是對s1調用malestart驗證了,會返回boolean。

  • 程序執行結果
    ======I’m Function.apply======Hi, You are female and length 20
    顯示信息: length=20;name=female;Date=null

一看show方法便知,不叨

Function和Predicate的其它方法寫API:
http://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html
http://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章