java8 十大新特性 --- 初識(一)

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 方法*/
}
相關文章
相關標籤/搜索