Stream中Peek方法具有什么功能呢?

书欣 Java经验 发布时间:2023-01-29 14:10:17 阅读数:11401 1
下文笔者讲述Stream中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)
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202301/16749727615568.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者