Guava函數(shù)式編程(1)

本章節(jié)主要介紹以下幾個接口和類:

  • Function和Functions
  • Predicate和Predicates
  • Supplier和Suppliers

Function和Functions

  • 使用Function接口
    Function接口中只定義了兩個方法:
  public interface Function<F,T> {
     T apply(F input);
     boolean equals(Object object);
  }

下面示例是使用java.util.Date類實例作為輸入莲兢,輸出字符串類型的時間:

  public class DateFormatFunction implements Function<Date,String> {
    @Override
    public String apply(Date input) {
       SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy");
       return dateFormat.format(input);
   }
 }

上面是使用實現(xiàn)接口的方式汹来,也可以使用匿名內(nèi)部類的方式,如下:

  Function<Date,String> function = new Function<Date, String>() {
       @Override
       public String apply( Date input) {
           return new SimpleDateFormat("dd/mm/yyyy").format(input);
      }
  };
  • 使用Functions實現(xiàn)類
    Functions實現(xiàn)類提供了很多的方法來結(jié)合Function接口的使用改艇。下面示例其中的兩個很實用的方法
    1收班、 Functions.forMap
    如下的State代表美國:
  public class State {
       private String name;
       private String code;
       private Set<City> mainCities = new HashSet<City>();
 }

假想現(xiàn)在有一Map<String, State> stateMap, 其中的String代表這個州的縮寫名谒兄。則使用Functions.forMap方法把其轉(zhuǎn)換成Function摔桦,并根據(jù)apply方法輸入具體的州別名,即可獲取其州對象承疲,代碼如下:

    Function<String,State> lookup = Functions.forMap(stateMap);
    //Would return State object for NewYork
    lookup.apply("NY");

注意:如果使用apply方法時邻耕,州的別名不存在時,會拋出IllegalArgumentException異常燕鸽。
2兄世、 Functions.compose
定義City的對象,如下:

  public class City {
     private String name;
     private String zipCode;
     private int population;
     public String toString() {
         return name;
     }    
  }

有這樣的一種情形啊研,給定一個州御滩,返回該州的主要城市名的字符串,各城市名以英文逗號分隔党远,這種情況下的Function類似以下:

  public class StateToCityString implements Function<State,String> {
     @Override
     public String apply(State input) {
         return Joiner.on(",").join(input.getMainCities());
     }
  }

更進一步削解,現(xiàn)在要求給定一州的別名,要求返回該州的主要城市的字符串麸锉,這時候Functions.compose可以派上用場了:

   Function<String,State> lookup = Functions.forMap(stateMap);
   Function<State, String> stateFunction = new StateToCityString();
   Function<String,String> composed = Functions.compose(stateFunction ,lookup);

我們只需要使用composed.apply("NY")钠绍,就會返回字符串:"Albany,Buffalo,NewYorkCity"舆声。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末花沉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子媳握,更是在濱河造成了極大的恐慌碱屁,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛾找,死亡現(xiàn)場離奇詭異娩脾,居然都是意外死亡,警方通過查閱死者的電腦和手機打毛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門柿赊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俩功,“玉大人,你說我怎么就攤上這事碰声」铗眩” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵胰挑,是天一觀的道長蔓罚。 經(jīng)常有香客問我,道長瞻颂,這世上最難降的妖魔是什么豺谈? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮贡这,結(jié)果婚禮上茬末,老公的妹妹穿的比我還像新娘。我一直安慰自己盖矫,他們只是感情好团南,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炼彪,像睡著了一般吐根。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辐马,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天拷橘,我揣著相機與錄音,去河邊找鬼喜爷。 笑死冗疮,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的檩帐。 我是一名探鬼主播术幔,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼湃密!你這毒婦竟也來了诅挑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泛源,失蹤者是張志新(化名)和其女友劉穎拔妥,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體达箍,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡没龙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硬纤。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡解滓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筝家,到底是詐尸還是另有隱情伐蒂,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布肛鹏,位于F島的核電站逸邦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏在扰。R本人自食惡果不足惜缕减,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芒珠。 院中可真熱鬧桥狡,春花似錦、人聲如沸皱卓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娜汁。三九已至嫂易,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掐禁,已是汗流浹背怜械。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留傅事,地道東北人缕允。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蹭越,于是被迫代替她去往敵國和親障本。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理响鹃,服務(wù)發(fā)現(xiàn)驾霜,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法茴迁,類相關(guān)的語法寄悯,內(nèi)部類的語法,繼承相關(guān)的語法堕义,異常的語法,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 世界上有兩種人怕膛,一種人做事情熟嫩,一種人制造出事情來,讓別人做褐捻。大部分人屬于第一種人掸茅,兢兢業(yè)業(yè)的做事情,第二種人柠逞,如果...
    雜家大兵閱讀 1,104評論 0 1
  • 新學(xué)期開始的第一天昧狮,小七早早起床,洗漱穿衣板壮,她換上了媽媽送的新學(xué)期禮物逗鸣,一條藏藍底色鑲嵌鵝黃色小雛菊的長裙,這是她...
    范兒青年閱讀 360評論 4 2