java8新_JAVA8新特性

Java SE 8是自Java 5以来最大的版本更新,引入了Lambda表达式、函数式接口和Stream API等核心特性,显著提升了开发效率和代码可靠性。Lambda允许匿名函数,对多核处理提供了支持,而Stream API则提供了处理集合的批量操作。此外,还改进了日期和时间API,移除了永久代,并增强了向后兼容性。这些改变使得Java在多方面得到了加强和发展。
摘要由CSDN通过智能技术生成

Java SE 8自java5以来最大的版本变动,很大程度增强java类库,主要目标

更高的开发效率

更高代码可靠性

更好利用多核和多处理器系统

代码不再串行执行

Lambda表达式

函数式接口:只包含一个方法的接口

语法:(parameters) -> expression 或者 (parameters) -> { statements; }

Lambda作用域

lambda表达式中访问外层的局部变量,可以不用声明为final,不过不可被后面的代码修改(即隐性的具有final的语义)

以前的做法:

new Thread(new Runnable() {

@Override

public void run() {

System.out.println(“实现的线程 ");

}

}).start();

Lambda实现方式:

new Thread(() ->System.out.println("lambda实现的线程")).start();

默认方法

提供相应机制将新方法添加到现有接口

未破环向后兼容性

为 Java 提供行为及类型(而不是状态!)的多继承

public interface A {

default void foo(){

System.out.println("Calling A.foo()");

}

}

public class Clazz implements A {

public static void main(String[] args){

Clazz clazz = new Clazz();

clazz.foo();//调用A.foo()

}

}

函数式接口

“函数式接口”是指仅仅只包含一个抽象方法的接口

添加 @FunctionalInterface注解,编译器如果发现你标注了这个注解的接口有多于一个抽象方法的时候会报错的。

lambda表达 ,每一个该类型的lambda表达式都会被匹配到这个抽象方法

方法与构造函数引用

方法        Integer::valueOf

构造函数  Person::new

Stream API

对集合执行批量数据操作

仅仅代表着数据流,并没有数据结构

串行和并行实现

Stream通用语法

28d6a398c37a70b1be41db7e0291f253.png

创建Strean

静态方法创建

Stream integerStream = Stream.of(1, 2, 3, 5);

来源Collection

Stream integerStream =nums.stream()

转换Stream

distinct: 对于Stream中包含的元素进行去重操作

599868a129cbf5b6f0a709ababc13fbc.png

filter: 对于Stream中包含的元素使用给定的过滤函数进行过滤操作

1c57cd12078633e0c3bf68d1a887cc35.png

map: 对于Stream中包含的元素使用给定的转换函数进行转换操作

92bf07f4d89d3197aa2b34fa3e89512d.png

聚合Stream

count方法 可使流的结果最终统计,返回int,比如我们计算一下满足18岁的总人数。

int countOfAdult=persons.stream() .filter(p -> p.getAge() > 18) .map(person -> new Adult(person)) .count();

顺序流与并行流

List people = list.getStream.collect(Collectors.toList());

List people = list.getStream.parallel().collect(Collectors.toList());

日期和时间 API

适用于 Java SE 平台的新日期、时间和日历 API

标准IOS日期格式

更流畅,实例不可变,线程安全

两个日期概念,机器时间, 比如Instant,人类自身的观念,比如LocalDate和LocalTime

Clock时钟 ,long millis = clock.millis();

Timezones 时区

LocalTime 本地时间

LocalDate 本地日期

LocalDateTime 本地日期时间

标准IOS日期格式

8f72743e8eac31ee28a60eeb8357d669.png

334b430fa5ce8f2bf8140729535c969d.png

新旧日期转换

Instant instant=new Date().toInstant();

Date date=Date.from(instant);

消除永久代(PermGen space)

不再需要调整其大小

当前对象移到 Java 堆或本地内存

JVM参数 -XX:PermSize 和 -XX:MaxPermSize被XX:MetaSpaceSize 和 -XX:MaxMetaspaceSize替换

Java SE 8 将添加大量新特性(并删除某些特性)

–   语言

–   库

–   JVM

Java 在不断发展!

–   jdk8.java.net

–   www.jcp.org

–   openjdk.java.net/jeps

–   参考:

Java 8 中的 Streams API 详解

https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值