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 方法*/ }