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的输出==女人负责貌美如花
能力有限,只能写到这里了,欢迎大家前来指点。