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

Java 8

Java 8 为Java语言、编译器、类库、开发工具与JVM(Java虚拟机)带来了大量新特性。

一、lambda

1、lambda 概述

lambda 数学符号 “λ” ,计算机领域中“λ” 代表 “λ演算”, 表达了计算机中最基本的概念:“调用” 和 “置换”

2、为什么要使用lambda?

1)Java是面向对象的语言,不能像函数式语言那样嵌套定义方法。

2)Java的匿名内部类只能存在于创建它的线程中,不能运行在多线程中,无法充分利用多核的硬件优势

3)匿名内部类的缺点还有:

#### 1 、语法相对复杂

#### 2、在调用内部类的上下文中,指引和this的指代容易混淆

#### 3、类加载和实例创建语法不可以避免

#### 4、不能引用外部的非final对象

#### 5、不能抽象化控制流程

3、如何使用lambda?

#### 1、参数列表 #### 2、箭头符号“->” #### 3、代码块

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);
    }
}

二、stream

1、stream 概述

1)Stream 在java8中被定于为泛型接口

2)Stream 接口代表数据流

3)Stream 不是一个数据结构,不直接存储数据

4)Stream 通过管道操作数据

5)Stream 创建Stream接口实现类对象

Stream(): 创建一个Stream接口实现类的对象。 例如:Stream<Person> stream = people.stream();

2、什么是管道?

1) 管道:代表一个操作序列

2) 管道包含以下组件:

#### 1、数据集:可能是集合、数组等. #### 2、零个或多个中间业务。如过滤器. #### 3、一个终端操作,如 forEach.

3、什么过滤器?

1) 过滤器:用给定的条件在源数据基础上过滤出新的数据,并返回一个Stream对象

2) 过滤器包含匹配的谓词

#### 例如: 判断P 对象是否为男性的lambda表达式:

#### Stream<Person> stream = people.stream();

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

转载于:https://my.oschina.net/u/3136594/blog/1498498

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值