学习目标:
- 掌握常用函数式接口
- 只能一个抽象方法(可以包含多个默认方法或多个 static 方法)
学习内容:
-
函数式接口介绍
如果一个接口中,只声明一个抽象方法,则此接口就称为函数式接口
java.util.function下是jdk自带函数式接口
不是每个接口都可以缩写成 Lambda 表达式。只有那些函数式接口(Functional Interface)才能缩写成 Lambda 表示式。
1)Java从诞生起就一直倡导“万物皆可对象”,在Java里面向对象(OOP)编程是一切,但是随着python、Scala等语言的兴起和挑战,Java不得不作出调整以便支持更加广泛的技术要求,也即Java不但可以支持OOP还可以支持OOF(面向函数编程)
2)在函数式编程语言中,函数被当作一等公民对待,在将函数作为一等公民的编程语言中,Lambda表达式的类型是函数,但是在Java8中,有所不同。在Java8注解,Lambda表达式是对象,而不是函数,它们必须依附于一类特别的对象类型—函数式接口
3)简单地说:在Java8中,Lambda表达式就是一个函数式接口的实例。这就是Lambda表达式和函数式接口的关系。也即是说,只要一个对象是函数式接口的实例 ,那么该对象就可以用Lambda表达式来表达
————————————————
版权声明:本文为CSDN博主「tianzhiya_ts」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tianzhiya_ts/article/details/131475317 -
常用函数式接口
-
Supplier接口,供应商
@Test public void testFunction(){ String s = getString(() -> "test"); int i1 = getInt(()->{ IntFunction<int[]> intFunction = int[]::new; int [] arr = intFunction.apply(10); return arr.length; }); List<String> list = getList(this::mylist); String s1 = get(()->"test123"); int i2 = get(()->123); System.out.println(s);//test System.out.println(i1);//10 System.out.println(list.size());//1 System.out.println(s1);//test123 System.out.println(i2);//123 } private <T> T get(Supplier<T> supplier){ return supplier.get(); } private List<String> mylist(){ List<String> list = new ArrayList<>(); for(int i = 0 ;i<10 ;i++){ list.add("list" + i); } return list; } public <W> List<W> getList(Supplier<List<W>> supplier){ List<W> list = supplier.get(); List<W> rest = new ArrayList<>(); rest.add(list.get(0)); return rest; } public Integer getInt(Supplier<Integer> supplier){ return supplier.get(); } public String getString(Supplier<String> supplier){ return supplier.get(); }
- Consumer接口,消费者
- 接口有两个方法,一个抽象方法
-
接口则正好与Supplier接口相反,他不是生产一个数据,而是消费一个数据,数据类型由泛型决定。Consumer接口中包含抽象方法void accept(T t),意思为消费一个指定泛型的数据
-
@FunctionalInterface public interface Consumer<T> { /** * Performs this operation on the given argument. * * @param t the input argument */ void accept(T t); default Consumer<T> andThen(Consumer<? super T> after) { Objects.requireNonNull(after); return (T t) -> { accept(t); after.accept(t); }; } }
- Predicate接口
需要对某种类型的数据进行判断,从而得到一个boolean值结果。这时可以使用java,util.function.Predicate<T>和接口。Predicate接口中包含一个抽象方法:boolean test(T t)。
-
- 函数式接口应用
学习产出:
提示:这里统计学习计划的总量
例如:
- 函数式编程源码
- CSDN 技术博客1 篇