你知道 jdk8新特性函数式接口吗?
本文目录:
1、什么是函数式接口?
2、自定义函数式接口
3、作为参数传递的Lanbda表达式
4、java内置四大核心函数式接口
5、其他接口
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
什么是函数式接口?
1)只包含一个抽象方法的接口,称为函数式接口。
2)可以通过Lambda表达式来创建该接口的对象(若Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。
3)我们可以在任意函数式接口上使用@FunctionalInterface注释,这样做可以检查它是否是一个函数式接口,同时javadoc也会包含一条声明,说明这个接口是一个函数式接口。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
自定义函数式接口
[code]@FunctionalInterface public interface MyFunction { public String getValue(String str); } 函数式接口中使用泛型 @FunctionalInterface public interface MyFunction2<T,R> { public R getValue2(T t,T T2); }
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
作为参数传递Lambda表达式:
作为参数传递给Lambda表达式:为了将Lambda表达式作为参数传递,接收Lambda表达式的参数类型必须是与该Lambda表达式兼容的函数式接口类型
[code]@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); }
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
JAVA内置四大核心函数式接口
[code]* java8 内置的四大核心接口 * Consumer<T>:消费性接口 * void accept(T t); * Supplier<T>:供给型接口 * T get(); * Function<T,R>: 函数型接口 * R apply(T t); * Predicate<T> : 断言型接口 * boolean test(T t);
1、Consumer<T>:消费性接口 传进一个参数 然后对该参数进行操作 没有返回值 操作了也就纯操作
void accept(T t);
[code]@Test public void run() { happy(10000, (m) -> System.out.println("消费了" + m + "元")); } public void happy(double money, Consumer<Double> consumer) { consumer.accept(money); }
2、Supplier<T>:供给型接口 用于给你产生一些对象 你可以指定你要产生的对象类型
void accept(T t);
[code]@Test public void run2() { List<Integer> numList = getNumList(10, () -> (int) (Math.random() * 100)); for (Integer integer : numList) { System.out.println(integer); } } //需求:产生指定个数的整数,并放入集合中 public List<Integer> getNumList(int num, Supplier<Integer> supplier) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < num; i++) { Integer n = supplier.get(); list.add(n); } return list; }
3、Function<T,R>函数型接口:传进去一个传参数,返回一个参数,可以通过定义泛型对其类型进行操作
R apply(T t);
[code]@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<String, String> function) { return function.apply(str); }
4、Predicate<T>: 断言型接口 用于一些做一些判断型操作
boolean test(T t);
[code]@Test public void run4(){ List<String> list = Arrays.asList("action","string","char","shore"); List<String> strings = filterStr(list, (s) -> s.length() > 5); for (String s:strings) { System.out.println(s); } } //需求:将满足条件的字符串放入集合中 public List<String> filterStr(List<String> list, Predicate<String> pre){ List<String> list1 = new ArrayList<>(); for (String str:list) { if (pre.test(str)){ list1.add(str); } } return list1; }
[code]---------------------------------------------------------------------------------------------------------------------------
其他接口
阅读更多
- JDK8新特性:函数式接口@FunctionalInterface的使用说明
- JDK 8.0 新特性——函数式接口和Lambda 表达式
- JDK8新特性:函数式接口@FunctionalInterface的使用说明
- JDK 8.0 新特性——函数式接口和Lambda 表达式
- JDK8新特性:函数式接口@FunctionalInterface的使用说明
- JDK8新特性之函数式接口
- java8新特性(一)之Lambda表达式和函数式接口
- java8新特性回顾(一)---函数式接口和lamda表达式
- jdk1.8新特性之函数式接口
- Java新特性:函数式接口
- 杰神之Java接口JDK1.8新特性
- JDK1.8新特性☞函数式接口测试
- java8新增特性(二)----函数式接口(Functional)
- Java8新特性 -- 四大内置的核心函数式接口
- JDK8新特性:接口的静态方法和默认方法
- Java8特性总结(二)Lambda表达式,函数式接口,方法引用
- Java 8新特性 内建函数式接口详解
- Java8 新特性之一---------Lambda表达式和函数式接口
- jdk8新特性:Lambda表达式(也称为闭包、可传递的匿名函数)与函数式接口@FunctionalInterface
- Java8新特性函数式接口