Optional中的map函數和flatMap函數的區別


今天在學scala的時候發現Option中有map和flatMap返回的都是Option,然后再java8中的Optional也存在這樣兩個函數,覺得有點多余。后來分析了一下,還是有存在的必要的。

1. map函數

map函數不用問,使用的很廣泛,函數簽名是public<U> Optional<U> map(Function<? super T, ? extends U> mapper),如入參是一個返回U的function。用法示例如下:


 Optional
      .ofNullable(11)
      .map(a -> a * 2)
      .orElse(0);

2. flatMap函數

flatMap函數的函數簽名是public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper),他的存在的必要性,是因為在使用中,存在很多返回值是Optional的函數,為了在Optional使用這些函數時,返回結果能方便使用,如下可以看出來使用flatMap,對於后續的鏈式編程非常方便。

   public static void main(String[] args) {
        //對於calculate這種函數,使用flatMap的話,返回的結果還是Optional,方便使用
        Optional<Integer> opt = Optional
                .ofNullable(11)
                .flatMap(a -> calculate(a));

        //對於calculate這種函數,如果使用map,返回的結果嵌套了Optional
        Optional<Optional<Integer>> opt2 = Optional
                .ofNullable(11)
                .map(a -> calculate(a));

    }


    public static Optional<Integer> calculate(int input) {
        return Optional.of(input * 2);
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM