码迷,mamicode.com
首页 > 其他好文 > 详细

jdk8入门

时间:2020-03-10 17:27:50      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:16px   arraylist   fun   编译   就是   使用   类型   运行   code   

一、Lambda 表达式

  作用:让代码简化,流水线式的逻辑。可以简化 匿名内部类的 写法。

  首先介绍函数式接口,这个接口只有一个方法。

1.1 简化匿名内部类

@FunctionalInterface
public interface Swimmable {
     void swim();
}

 

public class LambdaExpressDemo {

    public void goSwimming(Swimmable swimmable) {
        swimmable.swim();
    }

}

 

LambdaExpressDemo lambdaExpressDemo = new LambdaExpressDemo();
// 这是传统的 匿名内部类的写法
lambdaExpressDemo.goSwimming(new Swimmable() {
    @Override
    public void swim() {
        System.out.println("这是传统的 匿名内部类的写法");
    }
});

lambdaExpressDemo.goSwimming(() -> System.out.println("lambda表达式的写法"));

 

 1.2 简化线程实现的写法, 比如 new runable(){} 用lambda写,就是 ()-> {// TODO 具体的业务} 。

 1.3 集合的常用操作:排序。除了使用 lambda表达式来代替 new Comparator(){},还有更简单的写法。

  给定一个 Person类。

        List<Person> personArrayList = new ArrayList<>();
        personArrayList.add(new Person("Tom", 22, 166));
        personArrayList.add(new Person("Jerry", 76, 176));
        personArrayList.add(new Person("张三", 55, 188));
        personArrayList.add(new Person("李四", 76, 199));
        personArrayList.sort(Comparator.comparingInt(Person::getAge).thenComparing(Person::getName));
        personArrayList.forEach(System.out::println);

 

 运行结果是

Person{ Tom, 22, 166}
Person{ 张三, 55, 188}
Person{ Jerry, 76, 176}
Person{ 李四, 76, 199}

 

1.4 lambda表达式 和 匿名内部类的 比较

  1. 需要实现的类型不一样
    • 匿名内部类 需要抽象类 ,接口 都可以。
    • 而 lambda表达式 必须实现一个 函数式接口。
  2. 可以实现的抽象方法 的 数量不一样编译过程不一样
    • 匿名内部类 可以 实现 多个抽象方法。
    • 而 lambda表达式 只能 实现一个。
  3. 编译过程不一样
    • 匿名内部类 在 编译后 ,会形成一个 XXXXX$1.class文件。
    • 而 lambda表达式 在 程序运行的时候,不会生成 新的class文件。

 

二、内置的函数式接口

 

jdk8入门

标签:16px   arraylist   fun   编译   就是   使用   类型   运行   code   

原文地址:https://www.cnblogs.com/wuyicode/p/12456962.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!