stream流peek详解

stream流Peek详解

总结:peek能做的map也能做。打印数据用peek,修改数据用map仅此而已

map:打印数据,修改数据等都能做。

peek:同上。但是更多用于观察流中数据。

区别:peek不需要返回,map需要返回

//peek:
List<TrackBusinessCodePO> duplicates = groupedMap.values().stream()
        .filter(group -> group.size() > 1)
        .flatMap(List::stream)
        .peek(po -> {
            String currentException = po.getException();
            String newException = (currentException == null) ? exceptionMessage : currentException + ";" + exceptionMessage;
            po.setException(newException);
        })
        .collect(Collectors.toList());


//map:
List<TrackBusinessCodePO> duplicates = groupedMap.values().stream()
        .filter(group -> group.size() > 1)
        .flatMap(List::stream)
        .map(po -> {
            String currentException = po.getException();
            String newException = (currentException == null) ? exceptionMessage : currentException + ";" + exceptionMessage;
            po.setException(newException);
            return po;
        })
        .collect(Collectors.toList());

1:调试。  运行过程中,通过peek向控制台输出数据方便查看
我们有一个重复值的列表。我们将找到不同的值并使用peek方法进行调试。
List<String> list = Arrays.asList("AA", "BB", "CC", "BB", "CC", "AA", "AA");
String output = list.stream()
	.distinct()
	.peek(e -> System.out.println("Debug value: " + e))
	.collect(Collectors.joining(","));
System.out.println(output); 

结果:	Debug value: AA
			Debug value: BB
			Debug value: CC
			AA,BB,CC 

2:收集。   将流中的数据收集到其他集合中
 public static void main(String[] args) {
	List<String> debugList = new ArrayList<>();
        List<String> names = Arrays.asList("Mahesh", "Suresh", "Mahendra");
        names.stream()
         .filter(el -> el.startsWith("M"))
         .peek(e -> debugList.add(e))
         .collect(Collectors.toList());
        System.out.println(debugList);
  }

结果:[Mahesh, Mahendra] 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Streampeek方法用于在的每个元素上执行一个操作,而不会改变的元素。它接收一个Consumer函数作为参数,该函数对每个元素执行操作并返回一个修改后的peek方法可用于调试、观察元素的处理过程,但不会改变的内容。 例如,如果我们有一个包含整数的,并希望在处理每个元素时打印出元素的值,可以使用peek方法来实现: ```java List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.stream() .peek(num -> System.out.println("Processing element: " + num)) .forEach(System.out::println); ``` 在上面的例子peek方法用于打印每个元素的值,并且不会改变的元素。输出结果将是: ``` Processing element: 1 1 Processing element: 2 2 Processing element: 3 3 Processing element: 4 4 Processing element: 5 5 ``` 请注意,在的处理过程peek方法是一个操作,它并不会触发的终止操作。因此,我们在上面的例子通过forEach方法来触发的终止操作,以打印出的元素。 引用: :主要负责新建一个Stream,或者基于现有的数组、List、Set、Map等集合类型对象创建出新的Stream。API功能说明stream()创建出一个新的stream串行对象parallelStream()创建出一个可并行执行的stream对象Stream.of()通过给定的一系列元素创建一个新的Stream串行对象 :执行的时候,结果如下: 6 -----下面会报错----- java.lang.IllegalStateException: stream has already been operated upon or closed at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229) at java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:449) at com.veezean.skills.stream.StreamService.testHandleStreamAfterClosed(StreamService.java:153) at com.veezean.skills.stream.StreamService.main(StreamService.java:176) -----上面会报错-----

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值