关于JDK8的新特性
来源:互联网 发布:sql中is null什么意思 编辑:程序博客网 时间:2024/05/16 08:16
关于JDK8的新特性
Java SE8 的重要性能包括
1、Lambda
2、Nashorn JavaScript 引擎
3、新的日期与时间 API
4、一套简洁的配置文件
5、从 JVM 中去除了“永久代(permanent generation)”。6、增强的注解功能
Java SE Embedded8
1、Java SE Embedded8为嵌入式及物联网设备提供了一个开发平台,具备Java SE 8的灵活性、可移植性和功能。
2、Java SE Embedded 8 使开
发人员能够运用 Java SE 8 为嵌入式设备建立更小的平台。
Java ME8
1、与 Java SE 8 一致的 Java 语言和 API
2、支持最新的 Web 协议
3、全面的应用模型
4、先进的安全功能5、用于电源管理及与多种标准外部设备交互的标准 API。
Lambda
lambda 概述
lambda 表示数学符号“λ”,计算机领域中λ代表“λ演算”,表达了计算机中最基本
的概念:“调用”和“置换”。
为什么使用 lambda
一、Java 是面向对象的语言,不能象函数式语言那样嵌套定义方法。
二、Java 的匿名内部类只能存在于创建它的线程中,不能运行在多线程中,无法充分利用多核的硬件优势。
三、匿名内部类的缺点还有:
- 语法相对复杂。
- 在调用内部类的上下文中,指引和 this 的指代容易混淆。3. 类加载和实例创建语法不可避免。
- 不能引用外部的非 final 对象。
- 不能抽象化控制流程。
如何使用 lambda
lambda 的语法包括三部分
1、参数列表
2、箭头符号”->”
3、代码块。
代码块
代码块语法遵循标准markdown代码,例如:
用 lambda 简化 Runnable 接口的实现方式 代码 public static void main(String[] args) { //----------------------------------------------------- final int x = 1; new Runnable() { @Override public void run() { System.out.println("匿名内部类实现Runnable接口"); System.out.println("x : "+ x); // System.out.println("x : "+ x++); //error 常量} }.run();//----------------------------------------------------- int y = 2; Runnable r = ()->{ System.out.println("lambda实现Runnable接口"); // lambda语法 可以引用外部的非final对象 System.out.println("y : "+ y); // lambda语法只是部分改变了引用外部变量的语法 // System.out.println("y : "+ y++);};r.run(); } 运行结果为: 匿名内部类实现Runnable接口 x:1 lambda实现Runnable接口 y:2
Stream
什么是 Stream
1、Stream 在 Java8 中被定义为泛型接口
2、Stream 接口代表数据流。
3、Stream 不是一个数据结构,不直接存储数据。
4、Stream 通过管道操作数据。
5、创建 Stream 接口实现类对象: stream():创建一个 Stream 接口实现类的对象。
例如:
Stream stream=people.stream();
什么是管道
一、管道:代表一个操作序列。
二、管道包含以下组件:
1、数据集:可能是集合、数组等。
2、零个或多个中间业务。如过滤器
3、一个终端操作,如的 forEach
什么是过滤器
1、过滤器:用给定的条件在源数据基础上过滤出新的数据,并返回一个 Stream 对象。
2、过滤器包含匹配的谓词。
例如:判断 p 对象是否为男性的 lambda 表达式:
Stream stream=people.stream();
stream=stream.filter(p->p.getGender()==‘男’);
实例
public class Person {/*** 定义枚举:表示性别 ** @author admin**/public static enum Sex { MALE, FEMALE }private String name; private int age; private double height; private Sex gender;public String getName() { return name; }public void setName(String name) { this.name = name; }public int getAge() { return age; }public void setAge(int age) { this.age = age; }public double getHeight() { return height; } public void setHeight(double height) { this.height = height; }public Sex getGender() { return gender; }public void setGender(Sex gender) { this.gender = gender; }// ------构造器 public Person() {}public Person(String name, int age, double height, Sex gender){ super(); this.name = name; this.age = age; this.height = height; this.gender = gender;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", height="+ height + ", gender=" + gender + "]"; }}
###编写测试
生成 Person 的集合对象,利用 lambda 语法进行遍历。
static List<Person> creatPerson(){ List<Person> list = new ArrayList<>(); list.add(new Person("刘亦菲",30,1.70,Sex.FEMALE )); list.add(new Person("李若彤",40,1.65,Sex.FEMALE )); list.add(new Person("林青霞",62,1.68,Sex.FEMALE )); list.add(new Person("刘德华",52,1.74,Sex.MALE )); return list; }public static void main(String[] args) {List<Person> list = creatPerson();stream.forEach(p->System.out.println(p.toString()));}
运行结果
Person(name=”刘亦菲”, age=30, height=1.70, gender=FEMALE));
Person(name=”李若彤”, age=40, height=1.65, gender=FEMALE));
Person(name=”林青霞”, age=62, height=1.68, gender=FEMALE));
Person(name=”刘德华”, age=52, height=1.74, gender=MALE));
}
过滤器
创建一个元素为 Person 类的集合:people
使用 Stream、filter 和 forEach 显示该集合中所有女性
代码
生成 Person 的集合对象,利用 lambda 语法进行过滤并遍历。
static List< Person > creatPerson{List<Person> list = new ArrayList<>();list.add(new Person("刘亦菲", 30, 1.70, Sex.FEMALE)); list.add(new Person("李若彤", 40, 1.65, Sex.FEMALE)); list.add(new Person("林青霞", 62, 1.68, Sex.FEMALE)); list.add(new Person("刘德华", 52, 1.74, Sex.MALE)); return list;}public static void main(String[] args) { List<Person> list = creatPerson(); list.stream() .fileter(p -> p.getGender() == Person.Sex.FEMALE) .forEach(p -> System.out.println(p.tostring()));}
运行结果
Person(name=”刘亦菲”, age=30, height=1.70, gender=FEMALE));
Person(name=”李若彤”, age=40, height=1.65, gender=FEMALE));
Person(name=”林青霞”, age=62, height=1.68, gender=FEMALE));
LocalDate
概述
LocalDate 类使用 ISO 日历表示年、月、日。
常用方法
LocalDate 类的常用方法:
1、 LocalDate.now():获取系统当前日期。
2、 LocalDate.of(int year,int month,int dayOfMonth)
按指定日期创建 LocalDate 对象。
3、getYear():返回日期中的年份。
4、getMonth():返回日期中的月份。
5、getDayOfMonth():返回月份中的日。
【案例】
用 LocalDate 获取当前日期。
public static void main(String[] args) { LocalDate now = LocalDate.now(); System.out.println(now.getMonth()+"月"); //英文 System.out.println(now.getMonthValue()+"月");//数字 System.out.println(now.getDayOfMonth()+"日"); System.out.println(now.toString()); }
运行结果
2017年
SEPTEMBER月
9月
9日
2017-09-09
目录
用 [TOC]
来生成目录:
- 关于JDK8的新特性
- Lambda
- 代码块
- Stream
- 什么是 Stream
- 什么是管道
- 什么是过滤器
- 实例
- 过滤器
- LocalDate
- 概述
- 常用方法
- 目录
- Lambda
- 关于JDK8的新特性
- 关于jdk8新特性的郝博文
- jdk7和jdk8的一些新特性
- JDK5至JDK8的新特性
- JDK7与JDK8的新特性
- JDK5至JDK8的新特性
- jdk7和jdk8的一些新特性
- jdk8新特性
- JDK7、JDK8新特性
- JDK8新特性
- JDK8新特性-Lambda
- JDK8新特性-Stream
- JDK8新特性
- JDK8新特性
- jdk8新特性
- JDK8新特性--Stream
- JDK8新特性
- jdk8 新特性
- 勾股定理
- 《Java编程思想》参数化的接口
- HDU
- HDOJ HDU 1130 How Many Trees?
- Ajax 完整教程
- 关于JDK8的新特性
- 论文解读Attribute-Enhanced Face Recognition with Neural Tensor Fusion Networks
- HTTP缓存
- POJ
- SpringBoot WebSocket 跨域报错:Origin header value not allowed. Even though URL is allowed
- 高效生活系列
- 665. Non-decreasing Array(C++)
- sql关键字
- 字符串匹配算法(Brute-Force)