jdk8入门
Posted wuyicode
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk8入门相关的知识,希望对你有一定的参考价值。
一、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表达式 和 匿名内部类的 比较
- 需要实现的类型不一样
- 匿名内部类 需要抽象类 ,接口 都可以。
- 而 lambda表达式 必须实现一个 函数式接口。
- 可以实现的抽象方法 的 数量不一样编译过程不一样
- 匿名内部类 可以 实现 多个抽象方法。
- 而 lambda表达式 只能 实现一个。
- 编译过程不一样
-
- 匿名内部类 在 编译后 ,会形成一个 XXXXX$1.class文件。
- 而 lambda表达式 在 程序运行的时候,不会生成 新的class文件。
二、内置的函数式接口
以上是关于jdk8入门的主要内容,如果未能解决你的问题,请参考以下文章
Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)