函数式接口和Lambda表达式
函数式接口(一般标有@FunctionalInterface)就是只定义一个抽象方法的接口。
一个接口,如果满足函数式接口的定义,那么即使不标注为 @FunctionalInterface, 编译器依然会把它看做函数式接口。
如下是函数式接口的实例:
public interface A {
String sayHi();
}
interface B {
void sayHey();
}
interface C {
default void helloWorld() {
System.out.println("HelloWorld");
}
void sayHello();
}
interface D {
default void helloWorld() {
System.out.println("HelloWorld");
}
default String helloWorld2() {
return "HelloWorld";
}
void sayNothing();
}
@FunctionalInterface
interface E {
void handle(int i);
//此处的boolean equals(Object obj);方法不是抽象方法,因为相同的方法已在java.lang.Object 实现
//任何被java.lang.Object实现的方法,都不能视为抽象方法
boolean equals(Object obj);
}
Lambda表达式用在函数式接口出现的地方:
Lamda 表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,
并把整个表达式作为函数式接口的实例(具体来说,是函数函数式接口一个具体实现的实例。)
如下是Lambda 为Runnable 函数式接口的抽象方法run 提供实现的例子:
/**
* Lamda 表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,
* 并把整个表达式作为函数式接口的实例(具体来说,是函数函数式接口一个具体实现的实例。)
*
* 如下所示,使用lambda表达式可以简化匿名类的编写。
*
*
* Runnable 是一个函数式接口
* @FunctionalInterface
* public interface Runnable {
* public abstract void run();
* }
*
*/
public class LambdaDemo { public static void main(String[] args) { // 使用Lambda
Runnable r1 = () -> System.out.println("Hello World 1"); // 使用匿名类
Runnable r2 = new Runnable() { @Override
public void run() {
System.out.println("Hello World 2");
}
}; process(r1); process(r2); process(() -> System.out.println("Hello World 3")); } public static void process(Runnable r) {
r.run();
} }
函数式接口和Lambda表达式的更多相关文章
- Java函数式接口与Lambda表达式
什么是函数式接口? 函数式接口是一种特殊的接口,接口中只有一个抽象方法. 函数式接口与Lambda表达式有什么关系? 当需要一个函数式接口的对象时,可以提供一个lambda表达式. package l ...
- Lambda01 编程范式、lambda表达式与匿名内部类、函数式接口、lambda表达式的写法
1 编程范式 主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 1.1 命令式编程 关注计算机执行的步骤,就是告诉计算机先做什么后做什么 1.2 声明式编程 表达程序的执行逻辑,就是告诉计算 ...
- Java函数式编程:一、函数式接口,lambda表达式和方法引用
Java函数式编程 什么是函数式编程 通过整合现有代码来产生新的功能,而不是从零开始编写所有内容,由此我们会得到更加可靠的代码,并获得更高的效率 我们可以这样理解:面向对象编程抽象数据,函数式编程抽象 ...
- Java8函数式接口和Lambda表达式
两者关系: Lambda表达式就是函数式接口(FunctionalInterface)实现的快捷方式,它相当于函数式接口实现的实例,因为在方法中可以使用Object作为参数,所以把Lambda表达式作 ...
- Java 关于函数式接口与Lambda表达式之间的关系
java是一种面向对象的语言,java中的一切都是对象,即数组,每个类创建的实例也是对象.在java中定义的函数或方法不可能完全独立,也不能将方法函数作为参数或返回值给实例. 在java7及以前,我们 ...
- Java8 学习笔记--函数式接口与lambda表达式的关系
在java中,lambda表达式与函数式接口是不可分割的,都是结合起来使用的. 对于函数式接口,我们可以理解为只有一个抽象方法的接口,除此之外它和别的接口相比并没有什么特殊的地方.为了确保函数式接口的 ...
- java反射-Method中的invoke方法的用法-以及函数式接口和lambda表达式
作者最近研究框架底层代码过程中感觉自己基础不太牢固,于是写了一点案例,以防日后忘记 接口类:Animals 1 public interface Animals { 2 3 public void e ...
- Java8函数式接口以及lambda表达式实践
罗列一下遇到可以转换成lamada表达式的场景,仅供参考,如有更好的方式,欢迎在评论区留言. 1.计算订单总金额 订单总金额一般是在后台循环叠加每个购买商品的金额已获取到,通常的方式如下 BigDec ...
- Java 函数式编程和Lambda表达式
1.Java 8最重要的新特性 Lambda表达式.接口改进(默认方法)和批数据处理. 2.函数式编程 本质上来说,编程关注两个维度:数据和数据上的操作. 面向对象的编程泛型强调让操作围绕数据,这样可 ...
随机推荐
- Luogu P2501 [HAOI2006]数字序列
题目 首先把\(a\)改成严格单调上升等于把\(a_i-i\)改成单调不降. 那么第一问可以直接做LIS,答案就是\(n-\)LIS的长度. 同时我们记录一下序列中每个位置结尾的LIS长度. 第二问我 ...
- 会引起全表扫描的几种SQL 以及sql优化 (转)
出处: 查询语句的时候尽量避免全表扫描,使用全扫描,索引扫描!会引起全表扫描的几种SQL如下 1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like ‘ ...
- 剑指offer-最小的K个数-时间效率-排序-python
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 这就是排序题(将结果的最小K值输出) # -*- coding ...
- CNN与图像应用
一.图像识别与定位 0.Classification:C个类别 Input:Image Output:类别标签 Evaluation metric:准确率 1.Localization: Input: ...
- iphone手机软件安装目录
iPhone系统常用文件夹位置 1.[/Applications] 常用软件的安装目录 2. [/private /var/ mobile/Media /iphone video Recorder] ...
- ——HTTP状态码
200 请求成功,请求所希望的响应头或数据体将随此返回 302 请求的资源现在临时从不同的URI响应请求,由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求. 304 如果客户端发送了一 ...
- Java RMI 最简单实例
IHello.java import java.rmi.Remote; import java.rmi.RemoteException; public interface IHello extends ...
- MHA ssh检查,repl复制检查和在线切换日志分析
一.SSh 检查日志分析 执行过程及对应的日志: 1.读取MHA manger 节点上的配置文件 2.根据配置文件,得到各个主机的信息,逐一进行SSH检查 3.每个主机都通过SSH连接除了自己以外的其 ...
- iptables - IP包过滤器管理
总览 iptables -ADC 指定链的规则 [-A 添加 -D 删除 -C 修改] iptables - RI iptables -D chain rule num[option] iptable ...
- ucore Lab2 实验笔记
ucore Lab2 lab 2 直接执行make qemu-nox会显示 assert 失败: kernel panic at kern/mm/default_pmm.c:277: assertio ...