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