Java 8 函数式接口
-
什么是函数式接口?
-
如果一个接口中,只声明了一个抽象方法,则此接口称之为函数式接口
-
在1.8中,新增了一个注解:@FunctionalInterface,有该注解的接口都是函数式接口,如果Lambda表达式要使用,它就一定依赖于函数式接口
-
-
java8 内置核心函数式接口(四个)
| 函数式接口 | 参数类型 | 返回类型 | 作用 |
|---|---|---|---|
| Consumer | T | void | 对类型为T的对象应用操作,包含方法:void accept(T t); |
| Supplier | 无 | T | 返回类型为T的对象,包含方法: T get(); |
| Founction<T,R> | T | R | 处理类型为T的对象并返回结果,返回类型为R,包含方法 R apply(T t); |
| Predicate | T | boolean | 确定类型为T的对象是否满足约束,并返回boolean值,包含方法: boolean test(T t); |
-
详情介绍:
-
Consumer
@Test public void testConsumer(){ //Consumer 消费型接口 happyTime(1000.0, new Consumer<Double>() { @Override public void accept(Double aDouble) { System.out.println("今天我去买了个表,花费:"+aDouble); } }); System.out.println("****************************************"); happyTime(5000.0,money-> System.out.println("今天去了会所,花费:"+money)); } private void happyTime(Double money ,Consumer<Double> consumer){ consumer.accept(money); } -
Predicate
@Test public void testPredicate() { //断言接口 List<String> list = Arrays.asList("足球", "篮球", "乒乓球", "桌游", "羽毛球"); List<String> filters = filterList(list, new Predicate<String>() { @Override public boolean test(String s) { return s.contains("球"); }; }); System.out.println(filters); List<String> predicateList = filterList(list, key -> key.contains("球")); System.out.println(predicateList); } /** * 过滤字符串 */ private List<String> filterList(List<String> sourceList, Predicate<String> predicate) { List<String> filters = new ArrayList<>(); for (String s : sourceList) { if (predicate.test(s)) { filters.add(s); } } return filters; }
-
-
函数式接口都可以去 java.util.function 路径下去找,还有很多,感兴趣的可以看一下