Function相關接口簡介

Function相關接口簡介

什麼是Function接口?

interface Function<T, R>,它表明這樣的一個函數,接受一個參數,而後返回一個結果。segmentfault

Function接口的functional方法

R apply(T t)

表示,接受一個類型爲T的參數t,返回一個類型爲R的結果。注意:app

  1. TR能夠是同一種類型,固然也能夠是不一樣的類型。
  2. 這裏只接受一個參數。

那麼問題來了,我有兩個、三個參數怎麼辦?函數

什麼是BiFunction接口?

interface BiFunction<T, U, R>,從名字上你們應該就能推斷出來,它表明這樣的一個函數,接受兩個參數,而後返回一個結果。code

BiFunction接口的functional方法

R apply(T t, U u);

表示,接受兩個參數t和u,類型分別爲TU的,返回一個類型爲R的結果。注意:接口

  1. TUR能夠是同一種類型,固然也能夠是不一樣的類型。
  2. 這裏只接受兩個參數。

如今我們再來看上面的問題,三個參數的時候怎麼辦?function包下並無這樣的接口,因此咯,本身動手豐衣足食:ip

public interface TripleFunction<T, U, M, R> {
          R apply(T t, U u, M m);
  }

更進一步

function包還很貼心地爲咱們提供了不少經常使用的functional接口,其中很大一部分就是和原始類型Primitive Type)有關的。一旦掌握了其中的規律,能夠達到觸類旁通、事半功倍的效果。下面就跟着彬哥一塊兒來看看吧。ci

做爲參數的原始類型來劃分

  1. DoubleFunction,接受一個類型爲double的參數,返回一個結果。get

    @FunctionalInterface
        public interface DoubleFunction<R> {
            R apply(double value);
        }
  2. IntFunction,接受一個類型爲int的參數,返回一個結果。it

    @FunctionalInterface
        public interface IntFunction<R> {
            R apply(int value);
        }
  3. LongFunction,接受一個類型爲long的參數,返回一個結果。io

    @FunctionalInterface
        public interface LongFunction<R> {
            R apply(long value);
        }

做爲返回值的原始類型來劃分

  1. ToDoubleFunction,接受一個參數,返回一個類型爲double的結果。

    @FunctionalInterface
        public interface ToDoubleFunction<R> {
            double applyAsDouble(T value);
        }
  2. ToIntFunction,接受一個參數,返回一個類型爲int的結果。

    @FunctionalInterface
        public interface ToIntFunction<R> {
            int applyAsInt(T value);
        }
  3. ToLongFunction,接受一個參數,返回一個類型爲long的結果。

    @FunctionalInterface
        public interface ToLongFunction<R> {
            long applyAsLong(T value);
        }

參數和返回值相互轉化的

3個做爲參數的和3個做爲返回值的相互組合、去掉重複的

嗯,又Get到6種functional接口:

DoubleToIntFunctionDoubleToLongFunctionIntToDoubleFunctionIntToLongFunctionLongToDoubleFunctionLongToIntFunction

再更進一步

剛剛我們劃分出來的這個12個functional接口都是和Function相關的(一元),那function包有沒有給咱們提供其餘和BiFunction相關的functional接口呢?

固然有。

那我們就來看看這些二元的functional接口吧。

  1. ToDoubleBiFunction,接受兩個參數,返回一個類型爲double的結果。

    @FunctionalInterface
        public interface ToDoubleBiFunction<R> {
            double applyAsDouble(T t, U u);
        }
  2. ToIntBiFunction,接受兩個參數,返回一個類型爲int的結果。

    @FunctionalInterface
        public interface ToIntBiFunction<R> {
            int applyAsInt(T t, U u);
        }
  3. ToLongBiFunction,接受兩個參數,返回一個類型爲long的結果。

    @FunctionalInterface
        public interface ToLongBiFunction<R> {
            long applyAsLong(T t, U u);
        }

彬哥,這些只是做爲返回值的接口,按照上面一元function的劃分,那做爲參數相互轉化的二元接口呢?

那些啊,funciton包就並無提供了,一來不經常使用,二來啊,通過彬哥的介紹,相信你已經掌握規律了,很容易就寫出來了吧?那就做爲課後做業如何?

小結

這一講,我們主要介紹了Function相關的functional接口,按大的方面能夠以一元二元來分類;再細分的話,能夠按原始類型做爲參數做爲返回值參數返回值相互轉化的類別來劃分。

另外呀,能夠用function包概述及大綱做爲參考手冊來回顧和查詢。

相關文章
相關標籤/搜索