JAVA8新特性

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

  1. 更高的开发效率
  2. 更高代码可靠性
  3. 更好利用多核和多处理器系统
  4. 代码不再串行执行
  • 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通用语法

创建Strean

静态方法创建

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

来源Collection

Stream<Integer> integerStream =nums.stream()

转换Stream

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

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

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

聚合Stream 

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

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

顺序流与并行流

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

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

  • 日期和时间 API

  1. 适用于 Java SE 平台的新日期、时间和日历 API
  2. 标准IOS日期格式
  3. 更流畅,实例不可变,线程安全
  4. 两个日期概念,机器时间, 比如Instant,人类自身的观念,比如LocalDate和LocalTime
  5. Clock时钟 ,long millis = clock.millis();

  6. Timezones 时区
  7. LocalTime 本地时间
  8. LocalDate 本地日期

  9. LocalDateTime 本地日期时间
  10. 标准IOS日期格式

新旧日期转换

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

Date date=Date.from(instant);

  • 消除永久代(PermGen space)

不再需要调整其大小

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

JVM参数 -XX:PermSize 和 -XX:MaxPermSizeXX: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/

原文地址:https://www.cnblogs.com/xxuan/p/7308399.html