前言
Java 8对于程序员的主要好处在于它提供了更多的编程工具和概念,能以更快,更重要的是能以更为简洁、更易于维护的方式解决新的或现有的编程问题。今天来探究一下Java8中的函数式接口
函数式接口的定义:类型是接口,有且只有一个抽象方法
函数式接口一般都用@FunctionalInterface注解进行标注,当一个接口打上@FunctionalInterface注解之后就声明为一个函数式接口,这个接口中就只能有一个抽象方法,大于一个抽象方法就会报错。
Java8中的函数式接口
不管什么,先来它一个 hello world练练手
1. Supplier
没有输入,只有一个输出T
普通函数写法:
private String generalFunction(){ return "hello world""; }
函数式编程:
// 恭喜你,已经掌握第一步 hello world Supplier<String> supplier = () -> "hello world";
有没有很简洁的感觉。
测试:
2. Consumer
只有一个输入,没有输出
普通函数写法:
private void generalFunction(String i){ System.out.println("this is a " + i); }
函数式编程:
Consumer<String> consumer = i -> System.out.println("this is a " + i);
测试:
3. Function
输入T ,输出R
普通函数写法:
//计算一个数的平方 private int generalFunction(Integer i) { return i * i; }
函数式编程:
Function<Integer, Integer> function = i -> i * i;
测试:
4. UnaryOperator
输入、输出都是 T
普通函数写法:
private int generalFunction(Integer i) { return i * i; }
函数式编程:
UnaryOperator<Integer> unaryOperator = i -> i * i;
测试:
UnaryOperator是Function的专门化,用于操作数和结果具有相同类型的情况。
5. BiFunction
输入T 、U, 输出 R
普通函数写法:
// 计算两个数相乘,并输出:x*j=? private String generalFunction(Integer i, Integer j) { return i + "*" + j + "=" + i * j; }
函数式编程:
BiFunction<Integer, Integer, String> biFunction = (i, j) -> i + "*" + j + "=" + i * j;
测试:
6. Predicate
输入T ,输出boolean值
普通函数写法:
// 判断一个字符串是否是 hello private boolean generalFunction(String s) { return "hello".equals(s); }
函数式编程:
Predicate<String> predicate = "hello"::equals;
测试:
。。。。。。
除了以上介绍的,还有很多函数接口,看懂了这几个的定义方式 再去学习其他的一看就懂