首页 / JAVA / 【Java基础】JDK1.8新特性
【Java基础】JDK1.8新特性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【Java基础】JDK1.8新特性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3153字,纯文字阅读大概需要5分钟。
内容图文
JDK1.8新特性
-
Lambda表达式
-
- 操作符:new;
- 一个要实现的接口或要继承的类;
- 一对括号,如果是匿名子类,与实例化普通类的语法类似,如果有构造参数,要带上构造参数;如果是实现一个接口,只需要一对空括号即可;
- 一段被"{}"括起来类声明主体;
- 末尾的";"号(因为匿名类的声明是一个表达式,是语句的一部分,因此要以分号结尾)。
-
Lambda
如果接口中只有一个需要被实现的方法,可以使用Lambda表达式代替匿名内部类对接口进行简单实现。
语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体
-
一般用lambda表达式创建线程
Thread t = new Thread(() -> { for (int i = 0; i < 10; i++) { System.out.println(2 + ":" + i); } }).start();
其中()->{}代替匿名内部类实现了Runnable接口并重写了run方法。
-
还可以使用方法引用和构造器引用指向一个被实现了的匿名内部类方法
/** * 格式: 对象::实例方法名 类::静态方法名 类::实例方法名 */ public static void test2() { Employee employee = new Employee("张三", 12, 5555); Supplier<String> supplier = () -> employee.getName(); // 使用方法引用 Supplier<String> supplier1 = employee::getName; }
/** * 构造器引用ClassName::new */ public static void test() { Supplier<Employee> supplier = () -> new Employee("张三", 18, 13); // 构造器引用(调用的无参构造器) Supplier<Employee> supplier1 = Employee::new; Employee employee = supplier1.get(); // 构造器引用(调用有参构造器,一个参数的) Function<Integer, Employee> function = Employee::new; Employee employee1 = function.apply(10); }
-
-
default和static
JDK1.8允许用default和static关键字修饰接口中的方法,为了避免子类重复实现同样的代码
default为接口中的抽象方法写了一个默认的方法体实现,可以在子接口继续复写这个方法;
static修饰静态方法,可以直接使用接口调用。
-
Stream
用于操作数据源(集合,数组等)所生成的元素序列,主要有创建流、中间操作、终止操作三步。
-
创建流
//通过Collection系列集合的 stream() 或者 parallelStream() 获取流 List<String> list = new ArrayList<>(); Stream<String> stream = list.stream();
-
中间操作【通过中间操作链,对数据源的数据进行处理】
- filter( Predicate p):接收Lambda,从流中排除某些元素
- distinct():筛选,通过流所生成的hashCode()和equals()去除重复元素
- limit(long maxSize):截断流,使其元素不超过给定数量
- skip(long n):跳过元素,返回一个扔掉了前n个元素的流,若流中元素不足n个,则返回一个空流
List<Employee> employees = Arrays.asList( new Employee("张三", 18, 3333), new Employee("李四", 38, 55555), new Employee("王五", 50, 6666.66), new Employee("赵六", 16, 77777.77), new Employee("田七", 8, 8888.88) ); Stream<Employee> stream = employees.stream(); stream.filter((x) -> x.getAge() > 30) .limit(2) .forEach(System.out::println);
-
终止操作
比如forEach迭代操作,执行后Stream流将终止。
Stream操作集合更加简洁易读,而且支持并发模式。
-
-
Fork/Join框架:
就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个小的任务运算的结果进行join汇总。
在一般的线程池中,如果一个线程正在执行的任务由于某些原因无法继续运行,那么该线程会处于等待状态,而在fork/join框架实现中,如果某个子问题由于等待另外一个子问题的完成而无法继续运行,那么处理该子问题的线程会寻找其他尚未运行的子问题来执行,这种方式减少了线程的等待时间,提高了性能
Stream 可以通过parallel() 与 sequential() 在并行流与顺序流之间进行切换
-
Optional类
对于可能为null的变量可以用Optional修饰,不需要过多的null检查,也会减少空指针异常。
内容总结
以上是互联网集市为您收集整理的【Java基础】JDK1.8新特性全部内容,希望文章能够帮你解决【Java基础】JDK1.8新特性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。