剛接觸java8 Stream的時候,經常會感覺分不清楚 peek 與 map方法的區(qū)別其實了解一下λ表達式就明白了
首先看定義
Stream<T> peek(Consumer<? super T> action);
peek方法接收一個Consumer的入參齿椅。了解λ表達式的應該明白 Consumer的實現(xiàn)類 應該只有一個方法掏湾,該方法返回類型為void攒发。
Consumer<Integer> c = i -> System.out.println("hello" + i);
而map方法的入參為 Function有滑。
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
Function 的 λ表達式 可以這樣寫
Function<Integer,String> f = x -> {return "hello" + i;};
我們發(fā)現(xiàn)Function 比 Consumer 多了一個 return贷岸。
這也就是peek 與 map的區(qū)別了壹士。
總結:peek接收一個沒有返回值的λ表達式,可以做一些輸出偿警,外部處理等躏救。map接收一個有返回值的λ表達式,之后Stream的泛型類型將轉換為map參數(shù)λ表達式返回的類型