Stream中Peek方法具有什么功能呢?
下文笔者讲述Stream中Peek方法的功能及示例说明,如下所示
peek修改对象中的值
Stream之Peek方法功能
我们都知道Java8的stream由三部分组成:
数据源,0个或多个中间操作,0个或一个终止操作组成
中间操作:就是对数据的加工,中间操作是一个lazy动作,不会立即启动,等待终止操作时才会运行
终止操作:加上终止操作后,stream才会开始运行
peek:
就是一个中间操作,它不会由任何输出操作
此操作常用于debug动作中
peek源码定义
Stream<T> peek(Consumer<? super T> action); peek方法接收一个Consumer的入参 Consumer的实现类应该只有一个方法 该方法返回类型为void 它只是对Stream中的元素进行某些操作, 但是操作之后的数据并不返回到Stream中, 所以Stream中的元素还是原来的元素
Peek的示例分享
public class PeekTest1 {
public static void main(String[] args) {
list<Integer> list = Arrays.asList(4, 7, 9, 11, 12);
list.stream()
.map(x -> x + 2)
.filter(x -> x % 2 != 0)
.limit(2)
.forEach(System.out::println);
}
}
-----运行以上代码,将输出以下信息------
9
11
Peek示例2--此示例没有任何输出
public class PeekTest2 {
public static void main(String[] args) {
Stream<Integer> stream = Arrays.asList(11,22,33,55).stream();
stream.peek(System.out::println);
}
}
peek进行debug操作
peek的设计目的:
每个元素在操作之前打印相应的元素
方便我们对stream进行调试
例
public class PeekTestThree {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(11,22,34);
list.stream()
.peek(x -> System.out.println("stream: " + x))
.map(x -> x + 2)
.peek(x -> System.out.println("map: " + x))
.filter(x -> x % 2 != 0)
.peek(x -> System.out.println("filter: " + x))
.limit(2)
.peek(x -> System.out.println("limit: " + x))
.collect(toList());
}
}
peek和map的区别
1.使用peek操作流
流中的元素没有改变
2.peek操作不能修改对象,但是可以修改对象中的值
public class PeekAndMapTest1 {
public static void main(String[] args) {
Arrays.asList("java265","java265gogogo")
.stream()
.peek(x -> x.toUpperCase())
.forEach(System.out::println);
}
}
------运行以上代码,将输出以下信息-----
java265
java265gogogo
例:peek修改对象中的值
@Getter
@Setter
@AllArgsConstructor
@ToString
public class Person {
private String id;
private String name;
}
----------------------------------------------------------------------------
/**
* @author adeal
* @version v-1.0.0
* @since 2021/5/28
*/
public class PeekAndMapTestThree {
public static void main(String[] args) {
Arrays.asList(new Person("888","java"),new Person("999","niuniu"))
.stream().peek(p -> p.setId("111")).forEach(System.out::println);
}
}
-----运行以上代码,将输出以下信息-----
Person(id=111, name=java)
Person(id=111, name=niuniu)
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


