区别:peek没有返回值,map有返回值
定义:
peek:
Stream<T> peek(Consumer<? super T> action);
其中入参是 Consumer --> void accept(T t);
map:
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
其中入参:Function --> R apply(T t);
由此可见,他们的区别在于是否有返回值,
使用场景:
peek 处理无需返回值的情况,比如输出打印
Stream.of("one", "two", "three","four").peek(u -> u.toUpperCase())
.forEach(e -> System.out.print(e+"\t"));
结果
one two three four
我们发现 stream中的元素并没有转成大写
map 处理
Stream.of("one", "two", "three","four").map(u -> u.toUpperCase())
.forEach(e -> System.out.print(e+"\t"));
结果:
ONE TWO THREE FOUR
map 才真正对数据流进行了转换
当然如果传递的是一个对象也会改变,这也就是和我们方法一样
public void change(String str){
}
和 public String change(String str){
}
一样,Java中是值传递
public static void main(String[] args) {
String str = new String("ab");
change(str);
System.out.println(str);
}
public static void change(String str) {
str = "cd";
}
在进入到change方法的时候,首先 str=“ab” 也就是 指向1,然后修改str="cd",str指向2,当方法执行完后,str被销毁,
而main 方法的str 仍然指向 ab