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

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

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

Function和Functions

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

下面示例是使用java.util.Date類(lèi)實(shí)例作為輸入,輸出字符串類(lèi)型的時(shí)間:

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

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

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

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

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

注意:如果使用apply方法時(shí),州的別名不存在時(shí),會(huì)拋出IllegalArgumentException異常。
2、 Functions.compose
定義City的對(duì)象,如下:

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

有這樣的一種情形,給定一個(gè)州,返回該州的主要城市名的字符串,各城市名以英文逗號(hào)分隔,這種情況下的Function類(lèi)似以下:

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

更進(jìn)一步,現(xiàn)在要求給定一州的別名,要求返回該州的主要城市的字符串,這時(shí)候Functions.compose可以派上用場(chǎng)了:

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,638評(píng)論 18 399
  • 世界上有兩種人,一種人做事情,一種人制造出事情來(lái),讓別人做。大部分人屬于第一種人,兢兢業(yè)業(yè)的做事情,第二種人,如果...
    雜家大兵閱讀 1,233評(píng)論 0 1
  • 新學(xué)期開(kāi)始的第一天,小七早早起床,洗漱穿衣,她換上了媽媽送的新學(xué)期禮物,一條藏藍(lán)底色鑲嵌鵝黃色小雛菊的長(zhǎng)裙,這是她...
    范兒青年閱讀 427評(píng)論 4 2

友情鏈接更多精彩內(nèi)容