首先我将用lambda表达式实现一个数学运算工具类,来演示下如何新建一个可以运用lambda表达式的工具类,实际开发中,也没有必要为简单的四则运算写一个工具类。当然这里只是为了演示
1 新建一个MathFunction类
public class MathFunction {
public static int arithmetic(int number,
Function<Integer,Integer> function){
//这里Function只是一个功能接口,其两个泛型参数,分别是 lambda表达式 " -> " 前后的数据类型
int result = function.apply(number);
return result;
}
}
2 新建一个测试类
public class MathFunctionTest {
public static void main(String[] args) {
System.out.println(MathFunction.arithmetic(20, f->f+3));//20+3
System.out.println(MathFunction.arithmetic(20, f->f-3));//20-3
System.out.println(MathFunction.arithmetic(20, f->f*3));//20*3
System.out.println(MathFunction.arithmetic(20, f->f/3));//20/3
System.out.println(MathFunction.arithmetic(20, f->f%3));//20%3
}
}
运行结果:
23
17
60
6
2
上面的代码可以看出来 lambda表达式 其实就是一个函数式接口 即Function<Integer,Integer> function,下面我将用函数式接口Function实现计算一个人的姓名的长度是否大于3
1 首先新建一个User类(setter\getter就没拷贝了)
public class User {
private String name;
private int age;
public User(String name,int age){
this.name = name;
this.age = age;
}
}
2 新建一个UserFunction类,该类有两个方法,一个是实现Function<User,Boolean>重写的apply方法.这个方法实现了UserFunction这个类的功能(如果名字的长度大于3 返回true).
public class UserFunction implements Function<User,Boolean>{
@Override
public Boolean apply(User user) {
//apply法是实现UserFunction这个类的功能,即姓名的长度大于3 则返回true
//apply方法的参数是Function<User,Boolean>的第一个参数类,
//apply方法的返回类型是Function<User,Boolean>的第二个参数类型,
return user.getName().length()>3;
}
public static Boolean getNameLengthThan3(User user,UserFunction userFunction){
return userFunction.apply(user);
}
}
3 新建一个测试类
public class UserTest {
public static void main(String[] args) {
User user = new User("name",22);
System.out.println(UserFunction.getNameLengthThan3(user, new UserFunction()));
user.setName("ab");
System.out.println(UserFunction.getNameLengthThan3(user, new UserFunction()));
}
}
运行结果:
true
false