Back End

java8 新特性

PineappleCat · 3月31日 · 2021年 91次已读

1.java8概述

Java8 (又称JKD1.8) 是Java 语言开发的一个主要版本。

Oracle公司于2014年3月18日发布Java8 。

2.Lambda表达式

Lambda表达式:特殊的匿名内部类,语法更简洁。

Lambda表达式允许把函数作为一个方法的参数(函数作为方法参数传递),将代码像数据一样传递。

基本语法:

<函数式接口> <变量名> = (参数1,参数2...) -> {
//方法体
};

Lambda引入了新的操作符:->(箭头操作符),->将表达式分成两部分

  • 左侧:(参数1,参数2…)表示参数列表
  • 右侧:{}内部是方法体

注意事项:

  • 形参列表的数据类型会自动推断。
  • 如果形参列表为空,只需保留() 。
  • 如果形参只有1个,()可以省略,只需要参数的名称即可。
  • 如果执行语句只有一句,且无返回值,{}可以省略,若有返回值,则若想省去{},则必须同时省略return,且执行语句也保证只有一句。
  • Lambda不会生成一个单独的内部类文件。

测试代码1

public class Demo1 {
    public static void main(String[] args) {
        //创建Runnable对象
        new Thread(new Runnable(){
            @Override
            public void run() {
                System.out.println("asd");
            }
        }).start();
        //优化后
        new Thread(() -> System.out.println("asd")).start();
        
        //创建Comparator
        new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1,o2);
            }
        };
        //优化后
        Comparator<Integer> comparator = (o1, o2) -> Integer.compare(o1, o2);
    }
}

测试代码2

class Employee{
    private int age;
    private int money;

    public Employee() {
    }

    public Employee(int age, int money) {
        this.age = age;
        this.money = money;
    }

    //setter , getter

    @Override
    public String toString() {
    }
}
interface MyInterface<T> {
    boolean test(T t);
}
public class Demo2 {
    public static void main(String[] args) {
        ArrayList<Employee> employees = new ArrayList<>();
        employees.add(new Employee(20, 200));
        employees.add(new Employee(25, 400));
        employees.add(new Employee(30, 600));
       //内涵方法的回调
        List<Employee> filter = filter(employees, e -> e.getMoney() > 300);
        for (Employee o : filter) {
            System.out.println(o.toString());
        }
    }

    public static List<Employee> filter(List<Employee> list, MyInterface<Employee> e) {
        ArrayList<Employee> employees = new ArrayList<>();
        for (Employee employee : list) {
            if (e.test(employee)) {
                employees.add(employee);
            }
        }
        return employees;
    }
}

付费资源您未登录,请先

Click here to view the copyright notice of this site(点击此处查看本站版权声明)
0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!