Java 8
Java 8 为Java语言、编译器、类库、开发工具与JVM(Java虚拟机)带来了大量新特性。
1、lambda
一、lambda 概述
lambda 数学符号 “λ” ,计算机领域中“λ” 表明 “λ演算”, 表达了计算机中最基本的概念:“调用” 和 “置换”
二、为何要使用lambda?
1)Java是面向对象的语言,不能像函数式语言那样嵌套定义方法。
2)Java的匿名内部类只能存在于建立它的线程中,不能运行在多线程中,没法充分利用多核的硬件优点
3)匿名内部类的缺点还有:
#### 1 、语法相对复杂java
#### 二、在调用内部类的上下文中,指引和this的指代容易混淆数组
#### 三、类加载和实例建立语法不能够避免数据结构
#### 四、不能引用外部的非final对象多线程
#### 五、不能抽象化控制流程ide
三、如何使用lambda?
#### 一、参数列表 #### 二、箭头符号“->” #### 三、代码块函数
4 实例操做1
public class Lambda_demo1 { public static void main(String[] args) { // java 1.8 之前 new Runnable(){ @Override public void run() { System.out.println("java 1.8 之前"); } }.run(); // java 1.8 int i = 1; Runnable r=()->{ System.out.println("java 1.8 lambda 表达式"); System.out.println("i="+i); }; r.run(); } }
4 实例操做2
public class Lambda_demo2 { public static void main(String[] args) { // java 1.8 之前 new Action() { @Override public void execute(String context) { System.out.println(context); } }.execute("java 1.8 之前匿名内部类实现方式"); // java 1.8 Action d = (context)->{ System.out.println(context); }; d.execute("java 1.8 lambda表达式实现方式"); } static interface Action{ void execute(String context); } }
2、stream
一、stream 概述
1)Stream 在java8中被定于为泛型接口
2)Stream 接口表明数据流
3)Stream 不是一个数据结构,不直接存储数据
4)Stream 经过管道操做数据
5)Stream 建立Stream接口实现类对象
Stream(): 建立一个Stream接口实现类的对象。 例如:Stream<Person> stream = people.stream();
二、什么是管道?
1) 管道:表明一个操做序列
2) 管道包含如下组件:
#### 一、数据集:多是集合、数组等. #### 二、零个或多个中间业务。如过滤器. #### 三、一个终端操做,如 forEach.工具
三、什么过滤器?
1) 过滤器:用给定的条件在源数据基础上过滤出新的数据,并返回一个Stream对象
2) 过滤器包含匹配的谓词
#### 例如: 判断P 对象是否为男性的lambda表达式:开发工具
#### Stream<Person> stream = people.stream();this
#### stream = stream.filter(p->p.getGender()=='男')线程
4、示例演示(一)
package cn.evchar.demo.java8.lambda; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; public class Stream_demo1 { public static void main(String[] args) { List<Person> people = createPeople(); Stream<Person> stream = people.stream(); stream.forEach( p -> System.out.println(p.toString()) ); } static List<Person> createPeople(){ List<Person> list = new ArrayList<>(); list.add(new Person("张飞", Person.Sex.MALE,33,1.99)); list.add(new Person("王菲", Person.Sex.FEMALE,32,1.71)); list.add(new Person("刘亦菲", Person.Sex.FEMALE,31,1.69)); list.add(new Person("马飞", Person.Sex.MALE,33,1.89)); return list; } } class Person { protected static enum Sex { MALE(),FEMALE(); } private String name; private Sex gender; private int age; private double height; public Person(String name, Sex gender, int age, double height) { this.name = name; this.gender = gender; this.age = age; this.height = height; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", gender=" + gender + ", age=" + age + ", height=" + height + '}'; } /**get set 方法*/ }