1、什么是函数式接口?
2、自定义函数式接口
3、作为参数传递的Lanbda表达式
4、java内置四大核心函数式接口
5、其他接口
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1)只包含一个抽象方法的接口,称为函数式接口。
2)可以通过Lambda表达式来创建该接口的对象(若Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。
3)我们可以在任意函数式接口上使用@FunctionalInterface注释,这样做可以检查它是否是一个函数式接口,同时javadoc也会包含一条声明,说明这个接口是一个函数式接口。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@FunctionalInterface
public interface MyFunction {
public String getValue(String str);
}
函数式接口中使用泛型
@FunctionalInterface
public interface MyFunction2 {
public R getValue2(T t,T T2);
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
作为参数传递给Lambda表达式:为了将Lambda表达式作为参数传递,接收Lambda表达式的参数类型必须是与该Lambda表达式兼容的函数式接口类型
@Test
public void test2(){
// 去除字符串首尾空格
String s = strHandler("\t\t\t\t\t大夫", (str) -> str.trim());
System.out.println(s);
// 把小写字母变成大写
String upper = strHandler("adsaff",(str -> str.toUpperCase()));
System.out.println(upper);
// 截取字符串 按下标 从0开始
String s1 = strHandler("满意点个赞,谢谢", (str) -> str.substring(1,4));
System.out.println(s1);
}
public String strHandler(String str,MyFunction mf){
return mf.getValue(str);
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* java8 内置的四大核心接口
* Consumer:消费性接口
* void accept(T t);
* Supplier:供给型接口
* T get();
* Function: 函数型接口
* R apply(T t);
* Predicate : 断言型接口
* boolean test(T t);
1、Consumer
void accept(T t);
@Test
public void run() {
happy(10000, (m) -> System.out.println("消费了" + m + "元"));
}
public void happy(double money, Consumer consumer) {
consumer.accept(money);
}
2、Supplier
void accept(T t);
@Test
public void run2() {
List numList = getNumList(10, () -> (int) (Math.random() * 100));
for (Integer integer : numList) {
System.out.println(integer);
}
}
//需求:产生指定个数的整数,并放入集合中
public List getNumList(int num, Supplier supplier) {
List list = new ArrayList<>();
for (int i = 0; i < num; i++) {
Integer n = supplier.get();
list.add(n);
}
return list;
}
3、Function
R apply(T t);
@Test
public void run3(){
//去除首尾空格
String s = strHandler("\t\t\t\t 九点三公分课程", (str) -> str.trim());
System.out.println(s);
//截取字符串
String s1 = strHandler("九点三公分课程", (str) -> str.substring(1, 5));
System.out.println(s1);
}
//需求:用于处理字符串
public String strHandler(String str, Function function) {
return function.apply(str);
}
4、Predicate
boolean test(T t);
@Test
public void run4(){
List list = Arrays.asList("action","string","char","shore");
List strings = filterStr(list, (s) -> s.length() > 5);
for (String s:strings) {
System.out.println(s);
}
}
//需求:将满足条件的字符串放入集合中
public List filterStr(List list, Predicate pre){
List list1 = new ArrayList<>();
for (String str:list) {
if (pre.test(str)){
list1.add(str);
}
}
return list1;
}
---------------------------------------------------------------------------------------------------------------------------