JDK1.8新特性学习笔记

本文详细介绍了Java8的主要新特性,包括Lambda表达式的使用,函数式接口的概念,方法引用和构造器引用的简化语法,StreamAPI的特性与操作,接口中的默认方法和静态方法的引入,以及全新的日期时间API。通过这些新特性,Java程序员可以编写出更简洁、高效的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java新特性特点
●速度更快
●代码更少(增加了新的语法Lambda表达式)
●强大的Stream API
●便于并行
●最大化减少空指针异常Optional

1.Lambda表达式

●Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

●为引入Lambda表达式,Java8新增了java.util.funcion包,里面包含常用的函数接口,这是Lambda表达式的基础,Java集合框架也新增部分接口,以便与Lambda表达式对接。lambda表达式本质上是一段匿名内部类,也可以是一段可以传递的代码

接口名Java8新加入的方法
CollectionremoveIf() spliterator() stream() parallelStream() forEach()
ListreplaceAll() sort()
MapgetOrDefault() forEach() replaceAll() putIfAbsent() remove() replace() computeIfAbsent() computeIfPresent() compute() merge()

这些新加入的方法大部分要用到java.util.function包下的接口

2.函数式接口

① 什么是函数式接口

●如果一个接口只有一个抽象方法,则该接口称之为函数式接口,函数式接口可以使用Lambda表达式,Lambda表达式会被匹配到这个抽象方法上。

●@Functionallnterface 注解检测接口是否符合函数式接口。

@FunctionalInterface
public interface usb {|
vpid service();
}
public class Demo{
public static void mian(String[]args){
Usb mouse=new Usb(){
@Override
public void service(){
System.out.print1n("输出语句");
}
};
Usb fan=()->System.out.println("输出语句");
run(mouse);
run(lfan);
}
public static void run(Usb usb) {
usb.service();
}
}

② 常见函数式接口

在这里插入图片描述

3.方法引用与构造器引用

•方法引用是Lambda表达式的一种简写形式。如果Lambda表达式方法体中只是调用一个特定的已经存在的方法,则可以使用方法引用。

常见格式
•对象::实例方法
•类::静态方法
•类::实例方法(lambda参数列表中第一个参数是实例方法的调用 者,第二个参数是实例方法的参数时可用)
•类::new

对象::实例方法

Consumer<string> consumer=s->System.out.println(s);
consumer.accept("hello");
Consumer<string> consumer2=System.out::println;
consumer.accept("world")

类::静态方法

Comparator<Integer> sum1=(a,b)->Integer.compare(a, b);
Comparator<Integer> sum2=Integer::compare;

类::实例方法

Function<Employee, String> function=s->s.getName();
Function<Employee, String> function2=Employee:igetName;
System.out.println(function2.apply(new Employee("张三", 99999)));

类::new

Supplier<Employee> supplier=()->new Employee();
Supplier<Employee> supplier2=Employee::new;
Employee employee=supplier.get();
system.out.println(employee.tostring())

4.Stream API

什么是Stream

流(Stream)中保存对集合或数组数据的操作。和集合类似,但集合中保存的是数据。

Stream的特点

●Stream 自己不会存储元素。
●Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
●Stream操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。

创建Stream

●创建
新建一个流

●中间操作
在一个或多个步骤中,将初始Stream转化到另一个Stream的中间操作

●终止操作
使用一个终止操作来产生一个结果。该操作会强制它之前的延迟操作立即执行。在这之后,该Stream就不能使用了。

中间操作

代码作用
filter过滤
limit限制
skip跳过
distinct去重
sorted排序

终止操作

代码作用
foreach对数据便利操作
max最大值
min最小值
count计算
reduce求和
collect收集

5.接口中的默认方法与静态方法

默认方法
#接口默认方法的”类优先”原则#
若一个接口中定义了一个默认方法,而另外一个父类或接口中又定义了一个同名的方法时
●选择父类中的方法。如果一个父类提供了具体的实现,那么接口中具有相同名称和参数的默认方法会被忽略。
●接口冲突。如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(不管方法是否是默认方法),那么必须覆盖该方法来解决冲突

在接口中可以使用default和static关键字来修饰接口中定义的普通方法

public interface Interface {
    default  String name1(){
        return "zhangsan";
    }

    static String name2(){
        return "wangwu";
    }
}

在JDK1.8中很多接口会新增方法,为了保证1.8向下兼容,1.7版本中的接口实现类不用每个都重新实现新添加的接口方法,引入了default默认实现,static的用法是直接用接口名去调方法即可。当一个类继承父类又实现接口时,若后两者方法名相同,则优先继承父类中的同名方法,即“类优先”,如果实现两个同名方法的接口,则要求实现类必须手动声明默认实现哪个接口中的方法。

6.新时间日期API

本地化日期时间API

代码注释
LocalDate日期
LocalTime时间
LocalDateTime日期和时间
//创建本地时间
LocalDateTime localDateTime=LocalDateTime.now();
//LocalDateTime localDateTime2=LocalDateTime.of(year, month, dayofMonth, hour, minute)
System.out.println(localDateTime);
System.out.println(localDateTime.theYear());
System.out.println(localDateTime.theMonthValue());
System.out.println(localDateTime.theDayofMonth());

Instant:时间戳

//创建Instant:时间戳
Instant instant=Instant.now();
System.out.println(instant.toString());
System.out.println(instant.toEpochMilli());
System.out.println(System.currentTimeMillis());

ZoneId:时区

//创建zoneId:时区
Set<string> availableZoneIds = ZoneId.getAvailableZoneIds();
for (String string : availableZoneIds){
system.out.print1n(string);]

7.总结

1.Java8为容器新增一些有用的方法,这些方法有些是为完善原有功能,有些是为引入函数式编程,学习和使用这些方法有助于我们写出更加简洁有效的代码。
2.函数接口虽然很多,但绝大多数时候我们根本不需要知道它们的名字,书写Lambda表达式时类型推断帮我们做了一切。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值