Java高级学习-函数式接口

举报
AAAI 发表于 2021/04/18 00:20:07 2021/04/18
【摘要】 函数式接口:有且仅有一个抽象方法的接口 函数式编程:Lambda,函数式接口就是适用于Lambda使用的接口 语法糖:更加方便,但是原理不变的代码语法,for-each–底层式迭代器。 为了确保是函数式接口,使用注解:@FunctionalInterface 使用:一般作为方法的参数和返回值类型。 方法的参数是一个接口,可以传递接口的实现类对象 vo...

函数式接口:有且仅有一个抽象方法的接口

函数式编程:Lambda,函数式接口就是适用于Lambda使用的接口

语法糖:更加方便,但是原理不变的代码语法,for-each–底层式迭代器。

为了确保是函数式接口,使用注解:@FunctionalInterface

使用:一般作为方法的参数和返回值类型。

方法的参数是一个接口,可以传递接口的实现类对象

void show( MInterface in ){ }

show(new MyInterfaceImpl() );

方法的参数是一个接口,可以传递接口的匿名内部类

show( new MInterface() { } )

方法的参数是一个接口,可以使用lambda表达式

show( ( ) -> { 重写接口抽象方法 } )

函数式编程

使用lambda优化性能浪费,lambda特点:延迟加载,使用前提必须存在函数式接口。

方法的参数是一个函数式接口,使用lambda进行参数传递。

只有满足前提条件,才进行使用lamdba表达式作为参数传递。

使用Lambda方法的参数和返回值类型

参数:对函数式接口Runnable,假设由一个方法使用该接口作为参数,那么可以使用Lambda进行传参。

返回值:方法返回值类型为函数式接口,可以直接返回一个Lambda表达式

常用的函数式接口

java.util.function

Supplier接口

java.util.function.Supplier 生产型接口,仅包含一个无参方法:T get( )。用来获取一个泛型参数指定类型的对象数据。

public static int getMax(Supplier sup){ return sup.get() ; }

int[] arr = {1 , 2 , 3, 4 };

int a = getMax( () -> { int max = arr[0]; for ( int i : arr) { if (xxx) return xxx; } } )

Consumer接口

java.util.function.Consumer 消费型接口,消费数据。

抽象方法为:void accept(T t),消费一个指定泛型的数据。

默认方法:andThen:一步接一步,将两个操作组合,将两个Consumer接口组合到一起。

Consumer con1; Consumer con2;

String s = “XXX”;

con1.andThen(con2).accept(s); == { con1.accept(s); con2.accept(s); }

Predicate接口

进行判断,返回一个boolean结果

抽象方法 boolean test( T t):用来对指定数据类型数据进行判断的方法。是否满足事码条件,在lambda表达式里面重写抽象方法test()

可以用于判断过滤数组字符信息

默认方法:

and –

return pre1.and(pre2).test(s); // == return pre1.test(s) && pre2.test(s);

源码:

default Predicate<T> and ( Predicate<? super T> other){//泛型的下限:只能接受该类型及其父类:?  super  E
objects.requireNonNull(other);
return (t)  -> this.test(t) && other.test(t);
}

  
 
  • 1
  • 2
  • 3
  • 4

or

源码:

default Predicate<T> or ( Predicate<? super T> other){//泛型的下限:只能接受该类型及其父类:?  super  E
objects.requireNonNull(other);
return (t)  -> this.test(t) || other.test(t);
}

  
 
  • 1
  • 2
  • 3
  • 4

negate:取反

源码:

default Predicate<T> negate() { return (t) -> !test(t); } 

  
 
  • 1

Function接口

java.util.function.Function<T, R> 根据一个类型的数据得到另一个类型的数据。转换。

抽象方法:apply

R apply(T t)

默认方法:andThen:组合操作

Printalbe接口

对字符串进行打印

文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_38022166/article/details/115538517

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。