Java1.8新特性:函数式接口与lambda表达式和方法引用配合使用
更新时间:2022-12-29 作者:
lambda表达式
//创建线程的步骤 new Thread(new Runnable() { @Override public void run() { System.out.println("1"); } }); //lambda写法 new Thread( () -> System.out.println("1"));
new HashMap<>().forEach((key,value) -> System.out.println("key:" + key + " value:" + value)); new ArrayList<>().forEach( value -> System.out.println(value));
new HashMap<>().forEach((key,value) -> { System.out.println("key:" + key); System.out.println("value:" + value); });
() -> {return 1}; () -> 1;
方法引用
class Father{ public static void sout(){ System.out.println("sout"); } public void send(){ System.out.println("send"); } } public static void main(String[] args) { //静态方法 Father::sout; //实例方法 Father::send; //new 方法 Father::new; Father father = new Father(); father::send; }
函数式接口
- 供给型接口:
- Supplier,没有参数一个返回值
- 供给,理解就是你要给别人供给,所以要有一个返回值
//供给型接口 没有参数一个返回值 //提供方法 public static Object supplier(Supplier<Object> supplier){ return supplier.get(); } public static void main(String[] args) { //方法调用 supplier(new Supplier<Object>() { @Override public Object get() { //返回值 return 1; } }); //lambda表达式使用 supplier(() -> 1); //方法引用 () -> 1 等价于 Object::new //相当于返回了一个Object对象 supplier(Object::new); }
- 消费型接口:
- Consumer,一个参数没有返回值
- 消费,理解就是你要消费,所以需要一个参数
//消费型接口 一个参数没有返回值 //提供方法 public static void consumer(int param,Consumer<Integer> consumer){ consumer.accept(param); } public static void main(String[] args) { //方法调用 consumer(1,new Consumer<Integer>() { @Override public void accept(Integer integer) { //消费参数 System.out.println(integer); } }); //lambda consumer(1,integer -> System.out.println(integer)); //方法引用 consumer(1,System.out.println(integer)); }
- 断言型接口:
- Predicate,一个参数一个boolean值
- 断言,就是给你一个参数你判断然后返回boolean值
//断言型接口 一个参数一个boolean值 public static boolean predicate(int param,Predicate<Integer> predicate){ return predicate.test(a); } public static void main(String[] args) { //方法调用 predicate(1,new Predicate<Integer>() { @Override public boolean test(Integer integer) { return integer == 1; } }); //lambda predicate(1,integer -> 1 == 1); }
- 函数型接口:
- Function,一个参数一个返回值
//函数式接口 一个参数一个返回值 public static String function(int param,Function<Integer,String> function){ return function.apply(param); } public static void main(String[] args) { //方法调用 function(1,new Function<Integer, String>() { @Override public String apply(Integer integer) { return "str"; } }); //lambda function(1,() -> "str"); }
- 自定义函数式接口
@FunctionalInterface interface Sum<T>{ T all(int a,int b); } public static int myFunction(int a,int b,Sum<Integer> sum){ return sum.all(a,b); } public static void main(String[] args){ //调用方法 myFunction(1, 2, new Sum<Integer>() { @Override public Integer all(int a, int b) { return a + b; } }); //lambda myFunction(1, 2, (x, y) -> x * y); }