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 方法*/
}
相关文章
相关标签/搜索