1.发展史简介
从1996年**Java 1.0** *(其实应该说JDK1.0)* 版本开始发布,到2004年**Java 5.0**的发布,再到2014年**Java 8.0**的发布,
Java 8.0的发布算是历史上改变**最深远**的一次,目前已经发布到了Java 10.0,因博主知识量有限,就暂时只介绍Java8.0的内容。
2.为什么要用Java8
思前想后,我觉得应该是用Java8的原因我把它分为两个部分,
a.因为Java8的一些核心特性,Lambda,Stream,函数式编程。这些使用起来很是方便。
b.使用Java8 就是在保护自己的程序生涯,如果都不用Java8优秀的性能,以Java8之前版本的能力,
已经不足应付很多场景,很可能被同样运行在JVM上的竞争对手语言(如Scala 或Groovy)取代(引自Java8实战)。
3. 名词解释
- Lambda : 有的书中称之为匿名函数,且不管它叫什么,能用之皆可。
- 函数式编程:Java8里面将代码传递给方法的功能(同时也能够返回代码并将其包含在数据结构中),还让我们能够使用一套新技巧,通常称为函数编程。这个引自Java8实战,本系列博客中,会大量的引入Java8实战和Java8函数式编程 中的内容。
- 行为参数化:简而言之就是把某种行为(一段代码),当作参数一样传递给某个方法。
- 函数式接口:接口里面只定义了一个抽象方法的接口,都可以称之为抽象接口 。
4.Java8中常用的函数式接口
函数式接口 | 函数描述符 | 原始类型特化 |
---|---|---|
Predicate<T> | T->boolean | IntPredicate,LongPredicate,DoublePredicate |
Consumer<T> | T->void | IntConsumer,LongConsumer,DoubleConsumer |
Function<T,R> | T->R | IntFunction<R> IntToDoubleFunction ,... |
Supplier<T> | ()->T | IntSupplier, DoubleSupplier,... |
UnaryOperator<T> | T->T | IntUnaryOperator,LongUnaryOperator,... |
BinaryOperator<T> | (T,T)->T | IntBinaryOperator,LongBinaryOperator,... |
BiPredicate<T,U> | (T,U)->boolean | |
BiConsumer<T,U> | (T,U)->void | ObjIntConsumer<T>,LongBinaryOperator,... |
BinaryOperator<T> | (T,T)->T | IntBinaryOperator,LongBinaryOperator,... |
5.小练习
a.判断下面的接口是否为函数式接口
1.public interface Desk{
void test();
boolean another(String string);
}
2.public interface Consumer<T>{
void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after){
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
}
3.public interface Capacity{
int test();
}
b. 根据下列写的函数表达式,你会使用Java自带的哪个函数式接口.
1. ()-> R
2. (R,R)->R
3. T-> void
4. T->boolean
5. T->R
练习的答案,以及讲解中的代码都能在我的GitHub上面找到。