合集-闭包、java8、重写equals、
2021/6/28 20:25:38
本文主要是介绍合集-闭包、java8、重写equals、,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1 lambda表达式(闭包)
- 1.1 概念及优势
- 1.2 语法
- 1.3 特性
- 1.4 实例
- 2 java8的新特性
- 2.1 函数式接口
- 2.2 Lambda 表达式
- 2.3 方法引用
- 2.4 Stream API
- 2.5 Date Time API
- 2.6 Optional 类
- 3 为什么重写equals和重写hashcode?
1 lambda表达式(闭包)
1.1 概念及优势
- Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
- Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
- 使用 Lambda 表达式可以使代码变的更加简洁紧凑。
1.2 语法
-
(parameters) -> expression
-
(parameters) ->{ statements; }
1.3 特性
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
1.4 实例
// 1. 不需要参数,返回值为 5 () -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值 x -> 2 * x // 3. 接受2个参数(数字),并返回他们的差值 (x, y) -> x – y // 4. 接收2个int型整数,返回他们的和 (int x, int y) -> x + y // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void) (String s) -> System.out.print(s)
public class Demo1 { public static void main(String[] args) { runThreadByLambda(); runThreadByInnerClass(); } public static void runThreadByLambda() { /* Runnable就是一个函数式接口:他只有一个方法run()方法。 1、因为run()方法没有参数,所以 ->前面的()中不需要声明形参 2、run返回的是void,所以不需要return。 3、->后面写的代码其实就是定义在run方法内的代码。因为此处代码只有一行,所以{}也可以省略。如果此处多与一行,则无法省略。 */ Runnable runnable = () -> System.out.println("这个是用拉姆达实现的线程"); new Thread(runnable).start(); } public static void runThreadByInnerClass() { Runnable runnable = new Runnable() { @Override public void run() { System.out.println("这个是用内部类实现的线程"); } }; new Thread(runnable).start(); } }
2 java8的新特性
2.1 函数式接口
- 函数式接口是只包含一个方法的接口。
- 比如Java标准库中的java.lang.Runnable和 java.util.Comparator都是典型的函数式接口。
- java 8提供 @FunctionalInterface作为注解。
2.2 Lambda 表达式
Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
2.3 方法引用
lambda表达式的一种简化写法。
所引用的方法其实是lambda表达式的方法体实现,语法也很简单,左边是容器(可以是类名,实例名),中间是"::",右边是相应的方法名。
2.4 Stream API
新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
2.5 Date Time API
加强对日期与时间的处理。
2.6 Optional 类
- Optional类的Javadoc描述如下:这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
- Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
3 为什么重写equals和重写hashcode?
- HashMap中,如果要比较key是否相同,要同时使用这两个方法。
- 因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即便有相同含义的两个对象,比较也是不相等的。
- HashMap中的比较key是这样的,先求出key的hashcode(),比较其值是否相等,若相等再比较equals(),若相等则认为他们是相等的。若equals()不相等则认为他们不相等。
- 如果只重写hashcode()不重写equals()方法,当比较equals()时只是看他们是否为同一对象(即进行内存地址的比较),所以必定要两个方法一起重写。
- HashMap用来判断key是否相等的方法,其实是调用了HashSet判断加入元素是否相等。重载hashCode()是为了对同一个key,能得到相同的Hash Code,这样HashMap就可以定位到我们指定的key上。重载equals()是为了向HashMap表明当前对象和key上所保存的对象是相等的,这样我们才真正地获得了这个key所对应的这个键值对。
这篇关于合集-闭包、java8、重写equals、的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-28一步到位:购买适合 SEO 的域名全攻略
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门