lambda表达式与Function接口

xiaoxiao2021-02-28  98

首先我将用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

转载请注明原文地址: https://www.6miu.com/read-53879.html

最新回复(0)