java8 新特性之lamda表达式

lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。

为什么要用lamda表达式 ?  操作起来更方便提高编码能力,简化代码 始代码看起来更简洁干练

函数表达式 依赖于函数式接口

一 函数式接口 介绍

每个函数式接口只允许一个自定义方法 + 可以重写父类里面的方法

    @FunctionalInterface        //该注解助于编译器及时检查接口是否满足函数式接口定义 (可不写)
    interface  Functiona1{
        int  method1(int a,int b);
        //int  method2(int a,int b);    // 如果存在第二个自定义方法 就会报错

        @Override
        public String toString();   //这个方法可以使用 因为这个是重写父类Object的方法
    }

二 lamda 表达式使用

字符串类型

    @Test
    public void test02(){
        ArrayList<String> list = new ArrayList<>();
        list.add("刘备");
        list.add("关羽");
        list.add("张飞");
        list.add("赵云");

        System.out.println("jdk1.8 之前写法");
        for (String s : list) {
            System.out.println(s);
        }

        System.out.println("jdk1.8 之后写法");
        list.forEach(a-> System.out.println(a));
    }

自定义学生对象

    @Test
    public void test03() {
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student("刘备", 40));
        list.add(new Student("关羽", 37));
        list.add(new Student("张飞", 35));
        list.add(new Student("赵云", 30));
        System.out.println("jdk1.8 之前写法 排序后");
        for (Student student : list) {
            System.out.println(student);
        }

        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                if (o1.getAge() > o2.getAge()) return 1;
                else return -1;
            }
        });

        System.out.println("jdk1.8 之前写法 排序后");
        for (Student student : list) {
            System.out.println(student);
        }

        ArrayList<Student> list1 = new ArrayList<>();
        list1.add(new Student("刘备", 40));
        list1.add(new Student("关羽", 37));
        list1.add(new Student("张飞", 35));
        list1.add(new Student("赵云", 30));

        System.out.println("jdk1.8 之后写法 排序前");
        list1.forEach(a -> System.out.println(a));
        System.out.println("jdk1.8 之后写法 排序后");
        Collections.sort(list1, (s1, s2) -> s1.compare(s1, s2));
        list1.forEach(a -> System.out.println(a));

    }

Student类

import java.util.Comparator;

public class Student implements Comparator<Student> {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int compare(Student o1, Student o2) {
        if(o1.getAge() > o2.getAge()) return 1;
        else return -1;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
View Code

猜你喜欢

转载自www.cnblogs.com/lccsdncnblogs/p/java8_lamda.html