函数式接口和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.函数式编程 本质上来说,编程关注两个维度:数据和数据上的操作. 面向对象的编程泛型强调让操作围绕数据,这样可 ...
随机推荐
- 树型DP入门
题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚 ...
- 抖音很火的存钱计划,让python告诉你总共可以存到多少钱!
抖音上有个很火的存钱计划,说是第一天存1块钱,第二天存2块钱,第三天存3块钱.....依此类推存365天,总共可以存到多少钱,我们现在用python告诉你怎么做: #定个初始存入金额 money = ...
- django1.9安装以及使用
安装setuptoolswget --no-check-certificate https://pypi.python.org/packages/69/56/f0f52281b5175e3d9ca86 ...
- hadoop面试复习笔记(1)
0.Mappereduce采用的是Master/Slaves模型 1.Hadoop是一个开源软件框架,支持支持大数据集的存储和处理.Apache Hadoop是存储和处理大数据的解决方案你是因为: ( ...
- idea启动,mysql连接超时错误
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received ...
- iOS常用数学常量宏
在实际工作中有些程序不可避免的需要使用数学函数进行计算,比如地图程序的地理坐标到地图坐标的变换.Objective-C做为ANSI C的扩展,使用C标准库头文件<math.h>中定义的数学 ...
- 数据库(一):suse下MySQL安装
1.准备工作从MySQL官网上分别下载mysql服务器端于客户端包:MySQL-server-5.5.31-1.linux2.6.x86_64.rpmMySQL-client-5.5.31-1.lin ...
- c++判断当前登录账户是否在域环境内
#include <Windows.h> #include <DSRole.h> #pragma comment(lib, "netapi32.lib") ...
- Android开发艺术探索笔记之Activity
内容来源:Android开发艺术探索第一章:Activity的生命周期与启动模式 不能在onPause中做重量级的操作,因为必须执行完成以后新Activity才能Resume.onPause和onSt ...
- xavier_uniform/xavier_normal
import math from torch.autograd import Variable import torch import torch.nn as nn import warnings w ...