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