简单说一下java8
java在我们的心中已经是根深蒂固的了,给每一位编程人员都留下了很深的印象,作为一个软件工程专业毕业的孩子,不得不说在大学中陪伴最多的就是java.
java一直在发展,对于开发而言没有哪一门语言是最强的,只有不断地去改变,去适应市场与需求,这门语言才会长久的存活下去.
谈谈重点
对于java而言从1.0时代开始就引入了线程和锁的概念,但是我们想要使用起来学习成本是比较大的,在java8中对并行有了一种新的思路,不过你还是要遵循一些规则
这边文章主要就是对自己学习java8的一个记录,涉及到的内容有:
- 方法引用
- 函数式接口
- lambda表达式
- default/static 接口内部实现
- Stream sequential/parallel
- stream 的实现原理以及实战
Stream
流的引入是java8的最主要的特色了,因为流的引入,才有了lambda和并行的概念
开始实战
首先讲一下方法引用
方法引用顾名思义,指的就是对方法的引用,简而言之当你创建一个函数式接口的时候,需要new一个函数式接口的对象,这时你肯定要手动去实现这个接口的方法,方法引用你可以通过引用已经存在的方法来实现这个函数式接口的实现方法.
方法引用的条件
想要实现方法引用,需要观察呗引用的请求参数类型和返回参数类型,二者必须与要实现的接口返回值以及请求参数保持一致
- 静态方法引用
/*
* 静态方法引用 有返回值有参数,引入了一个函数式接口,静态方法引用可以直接使用类名
*/
Function<String, String> function = MethodReference::lol;
private static String lol(String str) {
return "lol";
}
这里Function的声明时引用了lol这个静态方法 Function的请求参数是String,返回值也是String,下面观察下lol这个方法,返回值与请求参数与之对应,所以可以使用方法引用.
- 对象方法引用
Apple apple = new Apple("red", 20);
/*
* 对象方法引用 没有参数有返回值,引用了一个函数式接口
*/
Supplier<String> supplier = apple::getColor;
顾名思义,对象法法引用就需要引用对象下的方法.这里不多做赘述
- 构造方法引用
/*
* 构造方法引用 没有返回值有两个参数,引用了一个函数式接口
*/
BiConsumer<String, Integer> biConsumer = Apple::new;
同理,引用的是函数的构造方法,没毛病