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上面找到。