本文代碼改自: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