Java8之前世今生(預)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章