Supplier接口
-
Supplier接口中只有一个抽象方法
T get()
,其中T指的是泛型,用来获取一个泛型参数所指定类型的数据 -
Supplier<T>
接口被称为生产型接口,指定泛型是什么类型,就获得什么类型的数据 -
代码
==函数定义== public int getMax(Supplier<int> sup){ return sup.get(); }
显然Suppiler是函数式接口可以使用Lambda表达式
==用Lambda表达式进行调用== int arr[] = {1,2,3,4,5}; //获取数组最大值 getMax(()->{ int max = arr[0]; for(int i:arr) if(i>arr[0]) max = i; return max; }
Consumer接口
- Consumer接口只有一个抽象方法
accept(T)
,T指泛型数据,将所接收的数据自定义格式化打出 Consumer<T>
被称为消费型接口,指定泛型是什么类型,就格式化什么类型的数据- 代码
==方法定义== public void printReverse(String name,Consumer<String> con){ con.accept(name); } ==Lambda调用== printReverse("ABC",(String name)->{ String rename = new BufferedString(name).reverse(); System.out.println(rename); });
- Consumer接口的
andThen()
默认方法con1.accept(name); con2.accept(name); ==等同于== con1.andThen(con2).accept(name);
Predicate接口
- Predicate接口只有一个抽象方法
test(T)
,T指泛型数据,自定义判断所接收的数据 Predicate<T>
被称为判断型接口,指定泛型是什么类型,就判断该类型是否满足一定条件- 代码
Predicate接口方法==函数定义== public void checkString(String name, Predicate<String> pre){ return pre.test(name); } ==lambda调用== String name ="ABCD"; checkString(name,(String name)->{ int len = name.length(); if(len>5)return true; else return false; });
and()
pre1.test(name)&&pre2.test(name); ==等同于== pre1.and(pre2).test(name);
同样的方法还有
or()
以及negate()
取反
!pre.test(name)
等同于pre.negate().test(name)
Function接口
- Function接口只有一个抽象方法
apply(T)
Function<T1,T2>
被称为转换型接口,从T1数据类型得到T2数据类型R apply(T)
由T类型获得R类型- 代码
==函数定义== public void printExChange(String str, Function<String,Integer> fun){ Integer in = fun.apply(str); System.out.println(in); } ==Lambda调用== String str = "123"; printExChange(str,(str)->{ return Integer.parseInt(str); } ==简化后== printExChange(str,str->Integer.parseInt(str));
- Function接口的默认方法andThen
- 这里的
andThen
和Consumer接口的是一样的作用 - 代码
-
public void changeTwice(String num,Function<String,Integer> fun1,Function<Integer,String>fun2){ fun1.apply(num); fun2.apply(num); ==等同于== fun1.andThen(fun2).apply(num); }
- 这里的
- Function接口的默认方法andThen