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)
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。