当前位置:网站首页>函数式接口
函数式接口
2022-07-04 17:48:00 【Cold Snowflakes】
函数式接口
有且仅有一个抽象方法的接口,函数式接口就是 lambda 表达式的使用前提。
可以使用 @FunctionalInterface 进行标记 函数式接口。
使用函数式接口 作为方法参数时,可以传递过去一个 lambda 表达式。
public class lambdademo {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<>();
array.add("ccc");
array.add("aa");
array.add("b");
array.add("dddd");
System.out.println("排序前: " + array);
// Collections.sort(array); // 自然排序
Collections.sort(array,getComparator()); // 比较器排序
System.out.println("排序后: " + array);
}
private static Comparator<String> getComparator(){
// 匿名内部类方式
// return new Comparator<String>() {
// @Override
// public int compare(String s1, String s2) {
// return s1.length() - s2.length();
// }
// };
// lambda方式, 因为返回值是 函数式接口
return (s1,s2) -> s1.length() - s2.length();
}
}
常用的函数式接口
函数式接口,作方法的参数时,调用的时候实际传过去一个 lambda表达式就可以了。
Supplier接口
@FunctionalInterface
public interface Supplier<T> {
T get();
}
Consumer接口
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after) {
return (T t) -> {
accept(t); after.accept(t); };
}
}
getString("随便吧",System.out::print);
private static void getString(String s, Consumer<String> cn){
// cn.accept(s);
Consumer<String> t = a -> System.out.print(a.length() + 1);
cn.andThen(t).accept(s);
// cn先执行一次 accept(s)
// t 再执行一次 accept(s)
}
Predicate接口
常用于判断参数是否满足指定条件
boolean test(T t) // 对给定参数进行判断, 判断逻辑由 lambda 提供
default Predicate<T> negate()
default Predicate<T> and(Predicate other)
default Predicate<T> or(Predicate other)
public static void main(String[] args) {
boolean res = checkString("fewef", s -> s.length() > 8);
System.out.print(res);
}
private static boolean checkString(String s, Predicate<String> t){
// return t.test(s);
// return t.negate().test(s); // 非
// return t.and(a -> a.startsWith("fy")).test(s); // 与
return t.or(a -> a.startsWith("fy")).test(s); // 或
}
Function接口
Function接口用于对参数进行处理,转换,返回一个新的值。
@FunctionalInterface
public interface Function<T, R> {
// T 是函数输入的类型
R apply(T t); // R 是函数结果的类型
// 对输入 进行两次 逻辑处理
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
return (T t) -> after.apply(apply(t));
}
}
边栏推荐
- Esp32-c3 introductory tutorial questions ⑫ - undefined reference to ROM_ temp_ to_ power, in function phy_ get_ romfunc_ addr
- Is Guoyuan futures a regular platform? Is it safe to open an account in Guoyuan futures?
- Nebula importer data import practice
- How is the entered query SQL statement executed?
- 请教一下 flinksql中 除了数据统计结果是状态被保存 数据本身也是状态吗
- 2022 ByteDance daily practice experience (Tiktok)
- 大div中有多个div,这些div在同一行显示,溢出后产生滚动条而不换行
- My colleagues quietly told me that flying Book notification can still play like this
- 大佬们,求助一下,我用mysql cdc 2.2.1(flink 1.14.5)写入kafka,设置
- 测试工程师如何“攻城”(上)
猜你喜欢
How to modify icons in VBS or VBE
[uniapp] uniapp development app online Preview PDF file
Principle and application of ThreadLocal
[release] a tool for testing WebService and database connection - dbtest v1.0
The 300th weekly match of leetcode (20220703)
大div中有多个div,这些div在同一行显示,溢出后产生滚动条而不换行
ThreadLocal原理与使用
Use canal and rocketmq to listen to MySQL binlog logs
更安全、更智能、更精致,长安Lumin完虐宏光MINI EV?
Scala基础教程--16--泛型
随机推荐
[go ~ 0 to 1] read, write and create files on the sixth day
从实时应用角度谈通信总线仲裁机制和网络流控
sqlserver的CDC第一次查询的能读取到数据,但后面增删改读取不到,是什么原因
Unity编辑器扩展C#遍历文件夹以及子目录下的所有图片
Bi skills - permission axis
SSL证书续费相关问题详解
使用canal配合rocketmq监听mysql的binlog日志
Scala basic tutorial -- 17 -- Collection
删除字符串中出现次数最少的字符【JS,Map排序,正则】
What if the self incrementing ID of online MySQL is exhausted?
Rookie post station management system based on C language
Scala基础教程--16--泛型
Uni app and uviewui realize the imitation of Xiaomi mall app (with source code)
2022 ByteDance daily practice experience (Tiktok)
Scala basic tutorial -- 13 -- advanced function
请教一下 flinksql中 除了数据统计结果是状态被保存 数据本身也是状态吗
Leetcode fizzbuzz C # answer
读写关闭的channel是啥后果?
PB的扩展DLL开发(超级篇)(七)
php伪原创api对接方法