一、函数式接口在Java中是指:有且仅有一个抽象方法的接口,所以函数式接口就是可以适用于Lambda使用的接口

二、自定义函数式接口

  格式:
@FunctionalInterface //该注解可省,一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错
public interface MyFunctionalInterface {
void myMethod();    
} 例子:
public class FunctionalInterfaceTest {
public static void main(String[] args) {
show(()->{
System.out.println("使用lambda表达式执行");
});
} public static void show(MyFunctionalInterface inner){
inner.method();
}
}

三、使用Lambda作为参数和返回值:如果方法的参数是一个函数式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法参数,其实就是使用 函数式接口作为方法参数。

        例子:Lambda作为参数
public class FunctionalInterfaceTest {
public static void main(String[] args) {
getThread1(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"....执行");
}
});
getThread2(()->{
System.out.println(Thread.currentThread().getName()+"....执行");
});
}
public static void getThread1(Runnable task){
new Thread(task).start();
}
public static void getThread2(Runnable task){
new Thread(task).start();
}
} 例子:作为返回值 public class ComparatorTest {
//定义一个方法,方法的返回值类型使用函数式接口Comparator
public static Comparator<Integer> getComparator(){
/*
return new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//降序
return o2 - o1;
}
};
*/
//使用lambda简写
return((o1, o2)-> o2 - o1);
};
public static void main(String[] args) {
Integer[] arr = {1,3,9,2,7,8};
System.out.println("....排序前...."+Arrays.toString(arr));
Arrays.sort(arr,getComparator());
System.out.println("....排序后...."+Arrays.toString(arr));
}
}

四、简单明了例子

        public class MyInterfacesTest {
public static void main(String[] args) {
/* getMethod(new MyInterfaces<String>() {
@Override
public int method(String s) {
return s.length();
}
});
*/
//简写方式
getMethod(s -> s.length()); //处理
} public static void getMethod(MyInterfaces<String> myInterfaces){
int len = myInterfaces.method("HelloWorld"); //传参
System.out.println("该字符串的长度为:"+len);
}
}

java基础之函数式接口的更多相关文章

  1. 用好JAVA中的函数式接口,轻松从通用代码框架中剥离掉业务定制逻辑

    大家好,又见面了. 今天我们一起聊一聊JAVA中的函数式接口.那我们首先要知道啥是函数式接口.它和JAVA中普通的接口有啥区别?其实函数式接口也是一个Interface类,是一种比较特殊的接口类,这个 ...

  2. Java基础-通过POI接口处理xls

    Java基础-通过POI接口处理xls 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  3. Java基础-Collection子接口之Set接口

    Java基础-Collection子接口之Set接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学习Collection接口时,记得Collection中可以存放重复元素,也可 ...

  4. Java基础-Collection子接口之List接口

    Java基础-Collection子接口之List接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们掌握了Collection接口的使用后,再来看看Collection接口中 ...

  5. 【Java 8】函数式接口(一)—— Functional Interface简介

    什么是函数式接口(Functional Interface) 其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法. 这种类型的接 ...

  6. 《Java基础——抽象与接口》

    Java基础--抽象与接口       一.抽象: 规则: 关键字 abstract 修饰的类称为抽象类. 子类通过关键字extends实现继承. 关键字 abstract 修饰的方法称为抽象方法,抽 ...

  7. 【Java 8】函数式接口(二)—— 四大函数接口介绍

    前言 Java8中函数接口有很多,大概有几十个吧,具体究竟是多少我也数不清,所以一开始看的时候感觉一脸懵逼,不过其实根本没那么复杂,毕竟不应该也没必要把一个东西设计的很复杂. 几个单词 在学习了解之前 ...

  8. Java 8 特性 —— 函数式接口

    函数式接口 概述:接口中只有一个抽象方法. 函数式接口,即适用于函数式编程场景的接口.而 Java 中的函数式编程体现就是 Lambda,所以函数式接口就是可以适用于 Lambda 使用的接口.只有确 ...

  9. Java 之 常用函数式接口

    JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景,它们主要在 java.util.function 包中被提供.下面是最简单的几个接口及使用示例. 一.Supplier 接口 java ...

  10. Java 中的函数式接口

    java.util.function中定义了几组类型的函数式接口以及针对基本数据类型的子接口. Predicate -- 传入一个参数,返回一个bool结果, 方法为boolean test(T t) ...

随机推荐

  1. 所生成项目的处理器架构“MSIL”与 “x86”不匹配

    在 .net 生成时如果修改过某个类库的平台目标,那么通常会出现下面的警告: 之所以产生这个问题是因为类库的"平台目标"不统一,如果选择了 x86, 那么解决方案中所有的项目都应设 ...

  2. idea 构建项目 编译失败: 内部 java 编译器错误

    昨天编译还好好的项目,今天不能构建运行了.尝试多种办法没有解决,咨询一位趟过坑的资深同事得到解决.(猜是由于项目不断增加依赖包,内存不够用了.) IDEA 文件|设置(Ctrl+Alt+S)|构建.执 ...

  3. Windows中安装和配置Maven

    1.下载 下载地址:https://maven.apache.org/download.cgi 下载文件:https://dlcdn.apache.org/maven/maven-3/3.9.6/bi ...

  4. macOS的PrivilegedHelperTools文件夹

    在 macOS 上,/Library/PrivilegedHelperTools 文件夹是一个特殊的位置,用于存放可以以更高权限运行的辅助工具或守护进程.这些工具通常由各种应用程序安装,以执行需要超出 ...

  5. python 爬取博客访问量

    一.代码 """ Version: Python3.5 Author: OniOn Site: http://www.cnblogs.com/TM0831/ Time: ...

  6. "最新"部署幻兽帕鲁游戏服务器及开局经验分享

    Banner 2024,<幻兽帕鲁><雾锁王国>等游戏爆火!那么如何快速拥有一个可以跟小伙伴们愉快玩耍的服务器呢?社区里不少小伙伴已经给出了自己的最佳实践,你甚至不需要懂技术, ...

  7. PD还是QC?快充协议全解析

    什么是快充协议 快充协议是一种通过提高充电效率来缩短设备充电时间的电池充电技术.它是通过在充电器和设备之间建立一种沟通机制,充电器能够根据设备的需求和状态,调整输出的电压和电流.这种沟通机制由快充协议 ...

  8. C# 委托与 Lambda 表达式转换机制及弱事件模式下的生命周期分析

    1. 委托内部结构 委托类型包含三个重要的非公共字段: _target 字段 静态方法包装:当委托包装一个静态方法时,该字段为 null. 实例方法包装:当委托包装实例方法时,该字段引用回调方法所操作 ...

  9. AI 插件第二弹,更强更好用

    概述 插件大更新 前一周, 我们开源了一个 AI 插件,发了一篇介绍的文章 DeepSeek 插件开源上线!支持多家云服务,一键解锁满血版 AI 引来了一些小小的反响,也有用户在评论区或者私底下提了一 ...

  10. php禁止跨域调用api(来自文心快码)

    在PHP中,禁止跨域调用API通常涉及到设置正确的HTTP响应头,以告知浏览器不允许来自不同源的请求.跨域资源共享(CORS)是一个W3C标准,它允许服务器放宽同源策略(SOP),从而允许某些跨站请求 ...