Stream map 与 peek

2021-12-02  本文已影响0人  秋元_92a3

他们的相同之处在于,都是遍历流中的每个元素
不通的地方在于,map接受的参数是一个带返回值的函数,map的执行结果是将参数中函数的执行结果;
而peek遍历流中每个元素,其遍历过程中对每个元素进行操作,但是其返回值仍然是流本身。

  @Test
  void peekTest () {
//    peek 接收一个Consumer,而map接收一个Function。
//    Consumer是没有返回值的,它只是对Stream中的元素进行某些操作,但是操作之后的数据并不返回到Stream中,所以Stream中的元素还是原来的元素。
//    而Function是有返回值的,这意味着对于Stream的元素所有操作都会作为新的结果返回到Stream中
//    换句话说,peek是一个有输入参数,无返回值的方法,方法的入参是不会发生变化的,但是入场的属性是语序发生改变的;这就是peek string不会发生变化,而peek object会发生变化的原因
    List<User> users = Stream.of(new User("Tom", 1), new User("Susan", 2), new User("Jack", 3)).collect(Collectors.toList());
    System.out.println("------map method-------");
    users.stream().map(u -> {
      u.setName(u.getName().toUpperCase(Locale.ROOT));
      return u.getName();
    }).collect(Collectors.toList()).forEach(System.out::println);
    System.out.println("------peek method-------");
    users.stream().peek(u -> u.setName(u.getName())).collect(Collectors.toList()).forEach(t -> System.out.println(t.getName()));
  }
上一篇下一篇

猜你喜欢

热点阅读