java8流式foreach循环.map和.peek区别


java8流式循环

1.流式循环

perms.stream()
          .filter(perm -> Objects.equals(perm.getType(), "菜单"))//过滤掉有按钮的行对象
          .forEach(menus::add)
          //.collect(Collectors.toList());  属性将其转化为和遍历类型相同的集合类型
          //.map(item -> { 将对象转换为另一种形式,对其赋值
          //      item.setChildMenuItems(getChildMenuItems(item.getId()));
          //      return item;
          //  })
//或
perms.forEach(e -> {
  
});

2. .map与.peek区别

在Java Stream中,.map.peek 是两种不同的操作,它们有一些关键的区别:

  1. 返回值类型:
    • .map 返回一个新的Stream,其中包含经过映射函数处理后的元素。
    • .peek 返回的仍然是原始的Stream,但在处理每个元素时可以执行副作用。
  2. 副作用:
    • .map 是一个中间操作,它对每个元素应用映射函数,并生成一个新的Stream。它的目的是转换元素而不产生副作用。
    • .peek 也是中间操作,但是它允许在处理元素时执行副作用操作,例如调试或记录每个元素的值。
  3. 使用场景:
    • .map 适用于需要对元素执行映射操作的场景,例如将每个元素转换为另一种类型或提取特定的信息。
    • .peek 适用于在处理元素时执行额外的操作,而不改变元素本身,例如调试、记录或验证。
  4. 延迟执行:
    • 由于Stream是惰性求值的,这两种操作都是延迟执行的。它们只有在终端操作(如.collect.forEach等)被调用时才会实际执行。

下面是一个简单的示例,演示了.map.peek 的使用:

javaCopy codeList<String> words = Arrays.asList("apple", "banana", "orange");

// 使用.map进行转换
List<Integer> wordLengths = words.stream()
                                .map(String::length)
                                .collect(Collectors.toList());
System.out.println(wordLengths);  // 输出: [5, 6, 6]

// 使用.peek执行副作用
List<Integer> lengthsWithPeek = words.stream()
                                    .map(String::length)
                                    .peek(length -> System.out.println("Length: " + length))
                                    .collect(Collectors.toList());
System.out.println(lengthsWithPeek);  // 输出: Length: 5, Length: 6, Length: 6, [5, 6, 6]

在上述示例中,.map(String::length) 将字符串转换为它们的长度,而 .peek(length -> System.out.println("Length: " + length)) 在处理每个元素时打印长度,但它最终返回的Stream仍然包含转换后的元素。

OK !!! 收尾!!!

若有误区或不能解决,私信我,远程协助你!!!

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值